Example usage for org.apache.commons.configuration HierarchicalConfiguration configurationsAt

List of usage examples for org.apache.commons.configuration HierarchicalConfiguration configurationsAt

Introduction

In this page you can find the example usage for org.apache.commons.configuration HierarchicalConfiguration configurationsAt.

Prototype

public List configurationsAt(String key) 

Source Link

Document

Returns a list of sub configurations for all configuration nodes selected by the given key.

Usage

From source file:com.graphhopper.jsprit.core.problem.io.VrpXMLReader.java

private void readVehiclesAndTheirTypes(XMLConfiguration vrpProblem) {

    //read vehicle-types
    Map<String, VehicleType> types = new HashMap<String, VehicleType>();
    List<HierarchicalConfiguration> typeConfigs = vrpProblem.configurationsAt("vehicleTypes.type");
    for (HierarchicalConfiguration typeConfig : typeConfigs) {
        String typeId = typeConfig.getString("id");
        if (typeId == null)
            throw new IllegalStateException("typeId is missing.");

        String capacityString = typeConfig.getString("capacity");
        boolean capacityDimensionsExist = typeConfig.containsKey("capacity-dimensions.dimension(0)");
        if (capacityString == null && !capacityDimensionsExist) {
            throw new IllegalStateException("capacity of type is not set. use 'capacity-dimensions'");
        }/*from w w  w  . ja  v  a 2 s.c  om*/
        if (capacityString != null && capacityDimensionsExist) {
            throw new IllegalStateException(
                    "either use capacity or capacity-dimension, not both. prefer the use of 'capacity-dimensions' over 'capacity'.");
        }

        VehicleTypeImpl.Builder typeBuilder;
        if (capacityString != null) {
            typeBuilder = VehicleTypeImpl.Builder.newInstance(typeId).addCapacityDimension(0,
                    Integer.parseInt(capacityString));
        } else {
            typeBuilder = VehicleTypeImpl.Builder.newInstance(typeId);
            List<HierarchicalConfiguration> dimensionConfigs = typeConfig
                    .configurationsAt("capacity-dimensions.dimension");
            for (HierarchicalConfiguration dimension : dimensionConfigs) {
                Integer index = dimension.getInt("[@index]");
                Integer value = dimension.getInt("");
                typeBuilder.addCapacityDimension(index, value);
            }
        }

        Double fix = typeConfig.getDouble("costs.fixed");
        Double timeC = typeConfig.getDouble("costs.time");
        Double distC = typeConfig.getDouble("costs.distance");

        if (fix != null)
            typeBuilder.setFixedCost(fix);
        if (timeC != null)
            typeBuilder.setCostPerTime(timeC);
        if (distC != null)
            typeBuilder.setCostPerDistance(distC);
        VehicleType type = typeBuilder.build();
        String id = type.getTypeId();
        types.put(id, type);
    }

    //read vehicles
    List<HierarchicalConfiguration> vehicleConfigs = vrpProblem.configurationsAt("vehicles.vehicle");
    boolean doNotWarnAgain = false;
    for (HierarchicalConfiguration vehicleConfig : vehicleConfigs) {
        String vehicleId = vehicleConfig.getString("id");
        if (vehicleId == null)
            throw new IllegalStateException("vehicleId is missing.");
        Builder builder = VehicleImpl.Builder.newInstance(vehicleId);
        String typeId = vehicleConfig.getString("typeId");
        if (typeId == null)
            throw new IllegalStateException("typeId is missing.");
        String vType = vehicleConfig.getString("[@type]");
        if (vType != null) {
            if (vType.equals("penalty")) {
                typeId += "_penalty";
            }
        }
        VehicleType type = types.get(typeId);
        if (type == null)
            throw new IllegalStateException("vehicleType with typeId " + typeId + " is missing.");
        builder.setType(type);

        //read startlocation
        Location.Builder startLocationBuilder = Location.Builder.newInstance();
        String locationId = vehicleConfig.getString("location.id");
        if (locationId == null) {
            locationId = vehicleConfig.getString("startLocation.id");
        }
        startLocationBuilder.setId(locationId);
        String coordX = vehicleConfig.getString("location.coord[@x]");
        String coordY = vehicleConfig.getString("location.coord[@y]");
        if (coordX == null || coordY == null) {
            coordX = vehicleConfig.getString("startLocation.coord[@x]");
            coordY = vehicleConfig.getString("startLocation.coord[@y]");
        }
        if (coordX == null || coordY == null) {
            if (!doNotWarnAgain) {
                logger.debug("location.coord is missing. will not warn you again.");
                doNotWarnAgain = true;
            }
        } else {
            Coordinate coordinate = Coordinate.newInstance(Double.parseDouble(coordX),
                    Double.parseDouble(coordY));
            startLocationBuilder.setCoordinate(coordinate);
        }
        String index = vehicleConfig.getString("startLocation.index");
        if (index == null)
            index = vehicleConfig.getString("location.index");
        if (index != null) {
            startLocationBuilder.setIndex(Integer.parseInt(index));
        }
        builder.setStartLocation(startLocationBuilder.build());

        //read endlocation
        Location.Builder endLocationBuilder = Location.Builder.newInstance();
        boolean hasEndLocation = false;
        String endLocationId = vehicleConfig.getString("endLocation.id");
        if (endLocationId != null) {
            hasEndLocation = true;
            endLocationBuilder.setId(endLocationId);
        }
        String endCoordX = vehicleConfig.getString("endLocation.coord[@x]");
        String endCoordY = vehicleConfig.getString("endLocation.coord[@y]");
        if (endCoordX == null || endCoordY == null) {
            if (!doNotWarnAgain) {
                logger.debug("endLocation.coord is missing. will not warn you again.");
                doNotWarnAgain = true;
            }
        } else {
            Coordinate coordinate = Coordinate.newInstance(Double.parseDouble(endCoordX),
                    Double.parseDouble(endCoordY));
            hasEndLocation = true;
            endLocationBuilder.setCoordinate(coordinate);
        }
        String endLocationIndex = vehicleConfig.getString("endLocation.index");
        if (endLocationIndex != null) {
            hasEndLocation = true;
            endLocationBuilder.setIndex(Integer.parseInt(endLocationIndex));
        }
        if (hasEndLocation)
            builder.setEndLocation(endLocationBuilder.build());

        //read timeSchedule
        String start = vehicleConfig.getString("timeSchedule.start");
        String end = vehicleConfig.getString("timeSchedule.end");
        if (start != null)
            builder.setEarliestStart(Double.parseDouble(start));
        if (end != null)
            builder.setLatestArrival(Double.parseDouble(end));

        //read return2depot
        String returnToDepot = vehicleConfig.getString("returnToDepot");
        if (returnToDepot != null) {
            builder.setReturnToDepot(vehicleConfig.getBoolean("returnToDepot"));
        }

        //read skills
        String skillString = vehicleConfig.getString("skills");
        if (skillString != null) {
            String cleaned = skillString.replaceAll("\\s", "");
            String[] skillTokens = cleaned.split("[,;]");
            for (String skill : skillTokens)
                builder.addSkill(skill.toLowerCase());
        }

        // read break
        List<HierarchicalConfiguration> breakTWConfigs = vehicleConfig
                .configurationsAt("break.timeWindows.timeWindow");
        if (!breakTWConfigs.isEmpty()) {
            String breakDurationString = vehicleConfig.getString("breaks.duration");
            Break.Builder current_break = Break.Builder.newInstance(vehicleId);
            current_break.setServiceTime(Double.parseDouble(breakDurationString));
            for (HierarchicalConfiguration twConfig : breakTWConfigs) {
                current_break.addTimeWindow(
                        TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
            }
            builder.setBreak(current_break.build());
        }

        //build vehicle
        VehicleImpl vehicle = builder.build();
        vrpBuilder.addVehicle(vehicle);
        vehicleMap.put(vehicleId, vehicle);
    }

}

From source file:com.graphhopper.jsprit.core.problem.io.VrpXMLReader.java

private void readServices(XMLConfiguration vrpProblem) {
    List<HierarchicalConfiguration> serviceConfigs = vrpProblem.configurationsAt("services.service");
    for (HierarchicalConfiguration serviceConfig : serviceConfigs) {
        String id = serviceConfig.getString("[@id]");
        if (id == null)
            throw new IllegalStateException("service[@id] is missing.");
        String type = serviceConfig.getString("[@type]");
        if (type == null)
            type = "service";

        String capacityString = serviceConfig.getString("capacity-demand");
        boolean capacityDimensionsExist = serviceConfig.containsKey("capacity-dimensions.dimension(0)");
        if (capacityString == null && !capacityDimensionsExist) {
            throw new IllegalStateException("capacity of service is not set. use 'capacity-dimensions'");
        }//from  w w w  .j av a2s. co  m
        if (capacityString != null && capacityDimensionsExist) {
            throw new IllegalStateException(
                    "either use capacity or capacity-dimension, not both. prefer the use of 'capacity-dimensions' over 'capacity'.");
        }

        Service.Builder builder;
        if (capacityString != null) {
            builder = serviceBuilderFactory.createBuilder(type, id, Integer.parseInt(capacityString));
        } else {
            builder = serviceBuilderFactory.createBuilder(type, id, null);
            List<HierarchicalConfiguration> dimensionConfigs = serviceConfig
                    .configurationsAt("capacity-dimensions.dimension");
            for (HierarchicalConfiguration dimension : dimensionConfigs) {
                Integer index = dimension.getInt("[@index]");
                Integer value = dimension.getInt("");
                builder.addSizeDimension(index, value);
            }
        }

        //name
        String name = serviceConfig.getString("name");
        if (name != null)
            builder.setName(name);

        //location
        Location.Builder locationBuilder = Location.Builder.newInstance();
        String serviceLocationId = serviceConfig.getString("locationId");
        if (serviceLocationId == null) {
            serviceLocationId = serviceConfig.getString("location.id");
        }
        if (serviceLocationId != null)
            locationBuilder.setId(serviceLocationId);

        Coordinate serviceCoord = getCoord(serviceConfig, "");
        if (serviceCoord == null)
            serviceCoord = getCoord(serviceConfig, "location.");
        if (serviceCoord != null) {
            locationBuilder.setCoordinate(serviceCoord);
        }

        String locationIndex = serviceConfig.getString("location.index");
        if (locationIndex != null)
            locationBuilder.setIndex(Integer.parseInt(locationIndex));
        builder.setLocation(locationBuilder.build());

        if (serviceConfig.containsKey("duration")) {
            builder.setServiceTime(serviceConfig.getDouble("duration"));
        }
        List<HierarchicalConfiguration> deliveryTWConfigs = serviceConfig
                .configurationsAt("timeWindows.timeWindow");
        if (!deliveryTWConfigs.isEmpty()) {
            for (HierarchicalConfiguration twConfig : deliveryTWConfigs) {
                builder.addTimeWindow(
                        TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
            }
        }

        //read skills
        String skillString = serviceConfig.getString("requiredSkills");
        if (skillString != null) {
            String cleaned = skillString.replaceAll("\\s", "");
            String[] skillTokens = cleaned.split("[,;]");
            for (String skill : skillTokens)
                builder.addRequiredSkill(skill.toLowerCase());
        }

        //build service
        Service service = builder.build();
        serviceMap.put(service.getId(), service);
        //         vrpBuilder.addJob(service);

    }
}

From source file:jsprit.core.problem.io.VrpXMLReader.java

private void readServices(XMLConfiguration vrpProblem) {
    List<HierarchicalConfiguration> serviceConfigs = vrpProblem.configurationsAt("services.service");
    for (HierarchicalConfiguration serviceConfig : serviceConfigs) {
        String id = serviceConfig.getString("[@id]");
        if (id == null)
            throw new IllegalStateException("service[@id] is missing.");
        String type = serviceConfig.getString("[@type]");
        if (type == null)
            type = "service";

        String capacityString = serviceConfig.getString("capacity-demand");
        boolean capacityDimensionsExist = serviceConfig.containsKey("capacity-dimensions.dimension(0)");
        if (capacityString == null && !capacityDimensionsExist) {
            throw new IllegalStateException("capacity of service is not set. use 'capacity-dimensions'");
        }/*  w ww  . j av  a2 s .co m*/
        if (capacityString != null && capacityDimensionsExist) {
            throw new IllegalStateException(
                    "either use capacity or capacity-dimension, not both. prefer the use of 'capacity-dimensions' over 'capacity'.");
        }

        Service.Builder builder;
        if (capacityString != null) {
            builder = serviceBuilderFactory.createBuilder(type, id, Integer.parseInt(capacityString));
        } else {
            builder = serviceBuilderFactory.createBuilder(type, id, null);
            List<HierarchicalConfiguration> dimensionConfigs = serviceConfig
                    .configurationsAt("capacity-dimensions.dimension");
            for (HierarchicalConfiguration dimension : dimensionConfigs) {
                Integer index = dimension.getInt("[@index]");
                Integer value = dimension.getInt("");
                builder.addSizeDimension(index, value);
            }
        }

        //name
        String name = serviceConfig.getString("name");
        if (name != null)
            builder.setName(name);

        //location
        Location.Builder locationBuilder = Location.Builder.newInstance();
        String serviceLocationId = serviceConfig.getString("locationId");
        if (serviceLocationId == null) {
            serviceLocationId = serviceConfig.getString("location.id");
        }
        if (serviceLocationId != null)
            locationBuilder.setId(serviceLocationId);

        Coordinate serviceCoord = getCoord(serviceConfig, "");
        if (serviceCoord == null)
            serviceCoord = getCoord(serviceConfig, "location.");
        if (serviceCoord != null) {
            locationBuilder.setCoordinate(serviceCoord);
        }

        String locationIndex = serviceConfig.getString("location.index");
        if (locationIndex != null)
            locationBuilder.setIndex(Integer.parseInt(locationIndex));
        builder.setLocation(locationBuilder.build());

        if (serviceConfig.containsKey("duration")) {
            builder.setServiceTime(serviceConfig.getDouble("duration"));
        }
        List<HierarchicalConfiguration> deliveryTWConfigs = serviceConfig
                .configurationsAt("timeWindows.timeWindow");
        if (!deliveryTWConfigs.isEmpty()) {
            for (HierarchicalConfiguration twConfig : deliveryTWConfigs) {
                builder.setTimeWindow(
                        TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
            }
        }

        //read skills
        String skillString = serviceConfig.getString("requiredSkills");
        if (skillString != null) {
            String cleaned = skillString.replaceAll("\\s", "");
            String[] skillTokens = cleaned.split("[,;]");
            for (String skill : skillTokens)
                builder.addRequiredSkill(skill.toLowerCase());
        }

        //build service
        Service service = builder.build();
        serviceMap.put(service.getId(), service);
        //         vrpBuilder.addJob(service);

    }
}

From source file:com.graphhopper.jsprit.io.problem.VrpXMLReader.java

private void readServices(XMLConfiguration vrpProblem) {
    List<HierarchicalConfiguration> serviceConfigs = vrpProblem.configurationsAt("services.service");
    for (HierarchicalConfiguration serviceConfig : serviceConfigs) {
        String id = serviceConfig.getString("[@id]");
        if (id == null)
            throw new IllegalArgumentException("service[@id] is missing.");
        String type = serviceConfig.getString("[@type]");
        if (type == null)
            type = "service";

        String capacityString = serviceConfig.getString("capacity-demand");
        boolean capacityDimensionsExist = serviceConfig.containsKey("capacity-dimensions.dimension(0)");
        if (capacityString == null && !capacityDimensionsExist) {
            throw new IllegalArgumentException("capacity of service is not set. use 'capacity-dimensions'");
        }// w  w  w.ja va2s.  c o m
        if (capacityString != null && capacityDimensionsExist) {
            throw new IllegalArgumentException(
                    "either use capacity or capacity-dimension, not both. prefer the use of 'capacity-dimensions' over 'capacity'.");
        }

        Service.Builder builder;
        if (capacityString != null) {
            builder = serviceBuilderFactory.createBuilder(type, id, Integer.parseInt(capacityString));
        } else {
            builder = serviceBuilderFactory.createBuilder(type, id, null);
            List<HierarchicalConfiguration> dimensionConfigs = serviceConfig
                    .configurationsAt("capacity-dimensions.dimension");
            for (HierarchicalConfiguration dimension : dimensionConfigs) {
                Integer index = dimension.getInt("[@index]");
                Integer value = dimension.getInt("");
                builder.addSizeDimension(index, value);
            }
        }

        //name
        String name = serviceConfig.getString("name");
        if (name != null)
            builder.setName(name);

        //location
        Location.Builder locationBuilder = Location.Builder.newInstance();
        String serviceLocationId = serviceConfig.getString("locationId");
        if (serviceLocationId == null) {
            serviceLocationId = serviceConfig.getString("location.id");
        }
        if (serviceLocationId != null)
            locationBuilder.setId(serviceLocationId);

        Coordinate serviceCoord = getCoord(serviceConfig, "");
        if (serviceCoord == null)
            serviceCoord = getCoord(serviceConfig, "location.");
        if (serviceCoord != null) {
            locationBuilder.setCoordinate(serviceCoord);
        }

        String locationIndex = serviceConfig.getString("location.index");
        if (locationIndex != null)
            locationBuilder.setIndex(Integer.parseInt(locationIndex));
        builder.setLocation(locationBuilder.build());

        if (serviceConfig.containsKey("duration")) {
            builder.setServiceTime(serviceConfig.getDouble("duration"));
        }
        List<HierarchicalConfiguration> deliveryTWConfigs = serviceConfig
                .configurationsAt("timeWindows.timeWindow");
        if (!deliveryTWConfigs.isEmpty()) {
            for (HierarchicalConfiguration twConfig : deliveryTWConfigs) {
                builder.addTimeWindow(
                        TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
            }
        }

        //read skills
        String skillString = serviceConfig.getString("requiredSkills");
        if (skillString != null) {
            String cleaned = skillString.replaceAll("\\s", "");
            String[] skillTokens = cleaned.split("[,;]");
            for (String skill : skillTokens)
                builder.addRequiredSkill(skill.toLowerCase());
        }

        //build service
        Service service = builder.build();
        serviceMap.put(service.getId(), service);
        //         vrpBuilder.addJob(service);

    }
}

From source file:com.graphhopper.jsprit.io.problem.VrpXMLReader.java

private void readVehiclesAndTheirTypes(XMLConfiguration vrpProblem) {

    //read vehicle-types
    Map<String, VehicleType> types = new HashMap<String, VehicleType>();
    List<HierarchicalConfiguration> typeConfigs = vrpProblem.configurationsAt("vehicleTypes.type");
    for (HierarchicalConfiguration typeConfig : typeConfigs) {
        String typeId = typeConfig.getString("id");
        if (typeId == null)
            throw new IllegalArgumentException("typeId is missing.");

        String capacityString = typeConfig.getString("capacity");
        boolean capacityDimensionsExist = typeConfig.containsKey("capacity-dimensions.dimension(0)");
        if (capacityString == null && !capacityDimensionsExist) {
            throw new IllegalArgumentException("capacity of type is not set. use 'capacity-dimensions'");
        }/*from   w  w  w .j  a v  a 2s  .c  o  m*/
        if (capacityString != null && capacityDimensionsExist) {
            throw new IllegalArgumentException(
                    "either use capacity or capacity-dimension, not both. prefer the use of 'capacity-dimensions' over 'capacity'.");
        }

        VehicleTypeImpl.Builder typeBuilder;
        if (capacityString != null) {
            typeBuilder = VehicleTypeImpl.Builder.newInstance(typeId).addCapacityDimension(0,
                    Integer.parseInt(capacityString));
        } else {
            typeBuilder = VehicleTypeImpl.Builder.newInstance(typeId);
            List<HierarchicalConfiguration> dimensionConfigs = typeConfig
                    .configurationsAt("capacity-dimensions.dimension");
            for (HierarchicalConfiguration dimension : dimensionConfigs) {
                Integer index = dimension.getInt("[@index]");
                Integer value = dimension.getInt("");
                typeBuilder.addCapacityDimension(index, value);
            }
        }

        Double fix = typeConfig.getDouble("costs.fixed");
        Double timeC = typeConfig.getDouble("costs.time");
        Double distC = typeConfig.getDouble("costs.distance");
        if (typeConfig.containsKey("costs.service")) {
            Double serviceC = typeConfig.getDouble("costs.service");
            if (serviceC != null)
                typeBuilder.setCostPerServiceTime(serviceC);
        }

        if (typeConfig.containsKey("costs.wait")) {
            Double waitC = typeConfig.getDouble("costs.wait");
            if (waitC != null)
                typeBuilder.setCostPerWaitingTime(waitC);
        }

        if (fix != null)
            typeBuilder.setFixedCost(fix);
        if (timeC != null)
            typeBuilder.setCostPerTransportTime(timeC);
        if (distC != null)
            typeBuilder.setCostPerDistance(distC);
        VehicleType type = typeBuilder.build();
        String id = type.getTypeId();
        types.put(id, type);
    }

    //read vehicles
    List<HierarchicalConfiguration> vehicleConfigs = vrpProblem.configurationsAt("vehicles.vehicle");
    boolean doNotWarnAgain = false;
    for (HierarchicalConfiguration vehicleConfig : vehicleConfigs) {
        String vehicleId = vehicleConfig.getString("id");
        if (vehicleId == null)
            throw new IllegalArgumentException("vehicleId is missing.");
        Builder builder = VehicleImpl.Builder.newInstance(vehicleId);
        String typeId = vehicleConfig.getString("typeId");
        if (typeId == null)
            throw new IllegalArgumentException("typeId is missing.");
        String vType = vehicleConfig.getString("[@type]");
        if (vType != null) {
            if (vType.equals("penalty")) {
                typeId += "_penalty";
            }
        }
        VehicleType type = types.get(typeId);
        if (type == null)
            throw new IllegalArgumentException("vehicleType with typeId " + typeId + " is missing.");
        builder.setType(type);

        //read startlocation
        Location.Builder startLocationBuilder = Location.Builder.newInstance();
        String locationId = vehicleConfig.getString("location.id");
        if (locationId == null) {
            locationId = vehicleConfig.getString("startLocation.id");
        }
        startLocationBuilder.setId(locationId);
        String coordX = vehicleConfig.getString("location.coord[@x]");
        String coordY = vehicleConfig.getString("location.coord[@y]");
        if (coordX == null || coordY == null) {
            coordX = vehicleConfig.getString("startLocation.coord[@x]");
            coordY = vehicleConfig.getString("startLocation.coord[@y]");
        }
        if (coordX == null || coordY == null) {
            if (!doNotWarnAgain) {
                logger.debug("location.coord is missing. will not warn you again.");
                doNotWarnAgain = true;
            }
        } else {
            Coordinate coordinate = Coordinate.newInstance(Double.parseDouble(coordX),
                    Double.parseDouble(coordY));
            startLocationBuilder.setCoordinate(coordinate);
        }
        String index = vehicleConfig.getString("startLocation.index");
        if (index == null)
            index = vehicleConfig.getString("location.index");
        if (index != null) {
            startLocationBuilder.setIndex(Integer.parseInt(index));
        }
        builder.setStartLocation(startLocationBuilder.build());

        //read endlocation
        Location.Builder endLocationBuilder = Location.Builder.newInstance();
        boolean hasEndLocation = false;
        String endLocationId = vehicleConfig.getString("endLocation.id");
        if (endLocationId != null) {
            hasEndLocation = true;
            endLocationBuilder.setId(endLocationId);
        }
        String endCoordX = vehicleConfig.getString("endLocation.coord[@x]");
        String endCoordY = vehicleConfig.getString("endLocation.coord[@y]");
        if (endCoordX == null || endCoordY == null) {
            if (!doNotWarnAgain) {
                logger.debug("endLocation.coord is missing. will not warn you again.");
                doNotWarnAgain = true;
            }
        } else {
            Coordinate coordinate = Coordinate.newInstance(Double.parseDouble(endCoordX),
                    Double.parseDouble(endCoordY));
            hasEndLocation = true;
            endLocationBuilder.setCoordinate(coordinate);
        }
        String endLocationIndex = vehicleConfig.getString("endLocation.index");
        if (endLocationIndex != null) {
            hasEndLocation = true;
            endLocationBuilder.setIndex(Integer.parseInt(endLocationIndex));
        }
        if (hasEndLocation)
            builder.setEndLocation(endLocationBuilder.build());

        //read timeSchedule
        String start = vehicleConfig.getString("timeSchedule.start");
        String end = vehicleConfig.getString("timeSchedule.end");
        if (start != null)
            builder.setEarliestStart(Double.parseDouble(start));
        if (end != null)
            builder.setLatestArrival(Double.parseDouble(end));

        //read return2depot
        String returnToDepot = vehicleConfig.getString("returnToDepot");
        if (returnToDepot != null) {
            builder.setReturnToDepot(vehicleConfig.getBoolean("returnToDepot"));
        }

        //read skills
        String skillString = vehicleConfig.getString("skills");
        if (skillString != null) {
            String cleaned = skillString.replaceAll("\\s", "");
            String[] skillTokens = cleaned.split("[,;]");
            for (String skill : skillTokens)
                builder.addSkill(skill.toLowerCase());
        }

        // read break
        List<HierarchicalConfiguration> breakTWConfigs = vehicleConfig
                .configurationsAt("breaks.timeWindows.timeWindow");
        if (!breakTWConfigs.isEmpty()) {
            String breakDurationString = vehicleConfig.getString("breaks.duration");
            Break.Builder current_break = Break.Builder.newInstance(vehicleId);
            current_break.setServiceTime(Double.parseDouble(breakDurationString));
            for (HierarchicalConfiguration twConfig : breakTWConfigs) {
                current_break.addTimeWindow(
                        TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
            }
            builder.setBreak(current_break.build());
        }

        //build vehicle
        VehicleImpl vehicle = builder.build();
        vrpBuilder.addVehicle(vehicle);
        vehicleMap.put(vehicleId, vehicle);
    }

}

From source file:com.sonicle.webtop.core.sdk.ServiceManifest.java

public ServiceManifest(HierarchicalConfiguration svcEl) throws Exception {

    String pkg = svcEl.getString("package");
    if (StringUtils.isEmpty(pkg))
        throw new Exception("Invalid value for property [package]");
    javaPackage = StringUtils.lowerCase(pkg);
    id = javaPackage;//from   ww  w.j av  a 2s  .  c o  m

    String jspkg = svcEl.getString("jsPackage");
    if (StringUtils.isEmpty(jspkg))
        throw new Exception("Invalid value for property [jsPackage]");
    jsPackage = jspkg; // Lowercase allowed!

    String sname = svcEl.getString("shortName");
    if (StringUtils.isEmpty(sname))
        throw new Exception("Invalid value for property [shortName]");
    xid = sname;

    ServiceVersion ver = new ServiceVersion(svcEl.getString("version"));
    if (ver.isUndefined())
        throw new Exception("Invalid value for property [version]");
    version = ver;

    buildDate = StringUtils.defaultIfBlank(svcEl.getString("buildDate"), null);
    buildType = StringUtils.defaultIfBlank(svcEl.getString("buildType"), BUILD_TYPE_DEV);
    company = StringUtils.defaultIfBlank(svcEl.getString("company"), null);
    companyEmail = StringUtils.defaultIfBlank(svcEl.getString("companyEmail"), null);
    companyWebSite = StringUtils.defaultIfBlank(svcEl.getString("companyWebSite"), null);
    supportEmail = StringUtils.defaultIfBlank(svcEl.getString("supportEmail"), null);

    List<HierarchicalConfiguration> hconf = null;

    hconf = svcEl.configurationsAt("controller");
    if (!hconf.isEmpty()) {
        //if (hconf.size() != 1) throw new Exception(invalidCardinalityEx("controller", "1"));
        if (hconf.size() > 1)
            throw new Exception(invalidCardinalityEx("controller", "*1"));

        final String cn = hconf.get(0).getString("[@className]");
        if (StringUtils.isBlank(cn))
            throw new Exception(invalidAttributeValueEx("controller", "className"));
        controllerClassName = buildJavaClassName(javaPackage, cn);

    } else { // Old-style configuration
        if (svcEl.containsKey("controllerClassName")) {
            controllerClassName = LangUtils.buildClassName(javaPackage,
                    StringUtils.defaultIfEmpty(svcEl.getString("controllerClassName"), "Controller"));
        }
    }

    hconf = svcEl.configurationsAt("manager");
    if (!hconf.isEmpty()) {
        if (!hconf.isEmpty()) {
            if (hconf.size() > 1)
                throw new Exception(invalidCardinalityEx("manager", "*1"));

            final String cn = hconf.get(0).getString("[@className]");
            if (StringUtils.isBlank(cn))
                throw new Exception(invalidAttributeValueEx("manager", "className"));
            managerClassName = buildJavaClassName(javaPackage, cn);
        }

    } else { // Old-style configuration
        if (svcEl.containsKey("managerClassName")) {
            managerClassName = LangUtils.buildClassName(javaPackage,
                    StringUtils.defaultIfEmpty(svcEl.getString("managerClassName"), "Manager"));
        }
    }

    /*
    hconf = svcEl.configurationsAt("privateService");
    if (!hconf.isEmpty()) {
       if (!hconf.isEmpty()) {
    if (hconf.size() > 1) throw new Exception(invalidCardinalityEx("manager", "*1"));
            
    final String cn = hconf.get(0).getString("[@className]");
    if (StringUtils.isBlank(cn)) throw new Exception(invalidAttributeValueEx("privateService", "className"));
    final String jcn = hconf.get(0).getString("[@jsClassName]");
    if (StringUtils.isBlank(jcn)) throw new Exception(invalidAttributeValueEx("privateService", "jsClassName"));
            
    privateServiceClassName = LangUtils.buildClassName(javaPackage, cn);
    privateServiceJsClassName = jcn;
    privateServiceVarsModelJsClassName = hconf.get(0).getString("[@jsClassName]");
       }
               
    } else { // Old-style configuration
       if (svcEl.containsKey("serviceClassName")) {
    String cn = StringUtils.defaultIfEmpty(svcEl.getString("serviceClassName"), "Service");
    privateServiceClassName = LangUtils.buildClassName(javaPackage, cn);
    privateServiceJsClassName = StringUtils.defaultIfEmpty(svcEl.getString("serviceJsClassName"), cn);
    privateServiceVarsModelJsClassName = StringUtils.defaultIfEmpty(svcEl.getString("serviceVarsModelJsClassName"), "model.ServiceVars");
       }
    }
    */

    if (svcEl.containsKey("serviceClassName")) {
        String cn = StringUtils.defaultIfEmpty(svcEl.getString("serviceClassName"), "Service");
        privateServiceClassName = LangUtils.buildClassName(javaPackage, cn);
        privateServiceJsClassName = StringUtils.defaultIfEmpty(svcEl.getString("serviceJsClassName"), cn);
        privateServiceVarsModelJsClassName = StringUtils
                .defaultIfEmpty(svcEl.getString("serviceVarsModelJsClassName"), "model.ServiceVars");
    }

    if (svcEl.containsKey("publicServiceClassName")) {
        String cn = StringUtils.defaultIfEmpty(svcEl.getString("publicServiceClassName"), "PublicService");
        publicServiceClassName = LangUtils.buildClassName(javaPackage,
                StringUtils.defaultIfEmpty(svcEl.getString("publicServiceClassName"), "PublicService"));
        publicServiceJsClassName = StringUtils.defaultIfEmpty(svcEl.getString("publicServiceJsClassName"), cn);
        publicServiceVarsModelJsClassName = StringUtils.defaultIfEmpty(
                svcEl.getString("publicServiceVarsModelJsClassName"), "model.PublicServiceVars");
    }

    hconf = svcEl.configurationsAt("jobService");
    if (!hconf.isEmpty()) {
        if (hconf.size() > 1)
            throw new Exception(invalidCardinalityEx("jobService", "*1"));

        final String cn = hconf.get(0).getString("[@className]");
        if (StringUtils.isBlank(cn))
            throw new Exception(invalidAttributeValueEx("jobService", "className"));
        jobServiceClassName = LangUtils.buildClassName(javaPackage, cn);

    } else { // Old-style configuration
        if (svcEl.containsKey("jobServiceClassName")) {
            jobServiceClassName = LangUtils.buildClassName(javaPackage,
                    StringUtils.defaultIfEmpty(svcEl.getString("jobServiceClassName"), "JobService"));
        }
    }

    if (!svcEl.configurationsAt("userOptions").isEmpty()) {
        userOptionsServiceClassName = LangUtils.buildClassName(javaPackage, StringUtils
                .defaultIfEmpty(svcEl.getString("userOptions.serviceClassName"), "UserOptionsService"));
        userOptionsViewJsClassName = StringUtils.defaultIfEmpty(svcEl.getString("userOptions.viewJsClassName"),
                "view.UserOptions");
        userOptionsModelJsClassName = StringUtils
                .defaultIfEmpty(svcEl.getString("userOptions.modelJsClassName"), "model.UserOptions");
    }

    hidden = svcEl.getBoolean("hidden", false);

    hconf = svcEl.configurationsAt("restApiEndpoint");
    if (!hconf.isEmpty()) {
        for (HierarchicalConfiguration el : hconf) {
            final String name = el.getString("[@name]");
            if (StringUtils.isBlank(name))
                throw new Exception(invalidAttributeValueEx("restApiEndpoint", "name"));
            final String path = el.getString("[@path]", "");

            if (restApiEndpoints.containsKey(path))
                throw new Exception(invalidAttributeValueEx("restApiEndpoint", "path"));
            restApiEndpoints.put(path, new RestApiEndpoint(buildJavaClassName(javaPackage, name), path));
        }
    }

    if (!svcEl.configurationsAt("restApis").isEmpty()) {
        List<HierarchicalConfiguration> restApiEls = svcEl.configurationsAt("restApis.restApi");
        for (HierarchicalConfiguration el : restApiEls) {
            final String oasFile = el.getString("[@oasFile]");
            if (StringUtils.isBlank(oasFile))
                throw new Exception(invalidAttributeValueEx("restApis.restApi", "oasFile"));
            final String context = oasFileToContext(oasFile);
            final String implPackage = el.getString("[@package]", "." + JAVAPKG_REST + "." + context);

            if (restApis.containsKey(oasFile))
                throw new Exception(invalidAttributeValueEx("restApis.restApi", "oasFile"));
            //String oasFilePath = LangUtils.packageToPath(buildJavaPackage(javaPackage, "." + JAVAPKG_REST)) + "/" + oasFile;
            String oasFilePath = LangUtils.packageToPath(javaPackage) + "/" + oasFile;
            restApis.put(oasFile,
                    new RestApi(oasFilePath, context, buildJavaPackage(javaPackage, implPackage)));
        }
    }

    if (!svcEl.configurationsAt("permissions").isEmpty()) {
        List<HierarchicalConfiguration> elPerms = svcEl.configurationsAt("permissions.permission");
        for (HierarchicalConfiguration elPerm : elPerms) {
            if (elPerm.containsKey("[@group]")) {
                String groupName = elPerm.getString("[@group]");
                if (StringUtils.isEmpty(groupName))
                    throw new Exception("Permission must have a valid uppercase group name");

                if (elPerm.containsKey("[@actions]")) {
                    String[] actions = StringUtils.split(elPerm.getString("[@actions]"), ",");
                    if (actions.length == 0)
                        throw new Exception("Resource must declare at least 1 action");
                    permissions.add(new ServicePermission(groupName, actions));
                } else {
                    throw new Exception("Permission must declare actions supported on group");
                }
            }
        }

        List<HierarchicalConfiguration> elShPerms = svcEl.configurationsAt("permissions.sharePermission");
        for (HierarchicalConfiguration elShPerm : elShPerms) {
            if (elShPerm.containsKey("[@group]")) {
                String groupName = elShPerm.getString("[@group]");
                if (StringUtils.isEmpty(groupName))
                    throw new Exception("Permission must have a valid uppercase group name");
                permissions.add(new ServiceSharePermission(groupName));
            }
        }
    }

    if (!svcEl.configurationsAt("portlets").isEmpty()) {
        List<HierarchicalConfiguration> elPortlets = svcEl.configurationsAt("portlets.portlet");
        for (HierarchicalConfiguration el : elPortlets) {
            if (el.containsKey("[@jsClassName]")) {
                final String jsClassName = el.getString("[@jsClassName]");
                if (StringUtils.isBlank(jsClassName))
                    throw new Exception("Invalid value for attribute [portlet->jsClassName]");
                portlets.add(new Portlet(LangUtils.buildClassName(jsPackage, jsClassName)));
            }
        }
    }
}

From source file:ch.admin.suis.msghandler.config.ClientConfigurationFactory.java

private void setupNativeOutbox(Iterator j, String baseDir, String sedexId,
        SenderConfiguration defaultSenderConfiguration) throws ConfigurationException {

    final HierarchicalConfiguration outboxSub = (HierarchicalConfiguration) j.next();

    final MessageType messageType = new MessageType(outboxSub.getInt(".[@msgType]"));

    String resolverFile = outboxSub.getString(".recipientIdResolver[@filePath]");
    File scriptFile = FileUtils.createPath(baseDir, resolverFile);
    FileUtils.isFile(scriptFile, ".recipientIdResolver[@filePath]");
    final ScriptedNamingService resolver = new ScriptedNamingService(scriptFile,
            outboxSub.getString(".recipientIdResolver[@method]"));

    String outboxDir = outboxSub.getString(DIR_PATH);
    final Outbox outbox = new Outbox(FileUtils.createPath(baseDir, outboxDir), sedexId, messageType, resolver);

    LOG.info("participant ID resolver configured, " + resolver + " for outbox " + outbox.getDirectory());

    final String outboxCron = outboxSub.getString("[@cron]");
    if (null != outboxCron) {
        // the outbox defines its own cron, create a separate sender configuration for this outbox
        // create the sender configuration - with the cron from the outbox
        final SenderConfiguration senderConfiguration = new SenderConfiguration(outboxCron);
        senderConfiguration.addOutbox(outbox);

        // and add this configuration to the client config
        clientConfiguration.addSenderConfiguration(senderConfiguration);
        LOG.info("sender added, " + senderConfiguration);
    } else {/*  ww  w . j  a va 2s.com*/
        // add this outbox to the default configuration
        defaultSenderConfiguration.addOutbox(outbox);
    }

    // the signing outboxes
    final List cfgSigningOutboxes = outboxSub.configurationsAt(".signingOutbox");

    setupSiginingOutbox(cfgSigningOutboxes, baseDir, outbox);
}

From source file:com.bytelightning.opensource.pokerface.PokerFace.java

/**
 * Configures all the needed components, but does not actually start the server.
 * @param config   Contains all information needed to fully wire up the http, https, and httpclient components of this reverse proxy.
 * @throws Exception   Yeah, a lot can go wrong here, but at least it will be caught immediately :-)
 *///from w  ww  .  j ava  2 s.  c o m
public void config(HierarchicalConfiguration config) throws Exception {
    List<HierarchicalConfiguration> lconf;
    HttpAsyncRequester executor = null;
    BasicNIOConnPool connPool = null;
    ObjectPool<ByteBuffer> byteBufferPool = null;
    LinkedHashMap<String, TargetDescriptor> mappings = null;
    ConcurrentMap<String, HttpHost> hosts = null;

    handlerRegistry = new UriHttpAsyncRequestHandlerMapper();

    // Initialize the keystore (if one was specified)
    KeyStore keystore = null;
    char[] keypass = null;
    String keystoreUri = config.getString("keystore");
    if ((keystoreUri != null) && (keystoreUri.trim().length() > 0)) {
        Path keystorePath = Utils.MakePath(keystoreUri);
        if (!Files.exists(keystorePath))
            throw new ConfigurationException("Keystore does not exist.");
        if (Files.isDirectory(keystorePath))
            throw new ConfigurationException("Keystore is not a file");
        String storepass = config.getString("storepass");
        if ((storepass != null) && "null".equals(storepass))
            storepass = null;
        keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        try (InputStream keyStoreStream = Files.newInputStream(keystorePath)) {
            keystore.load(keyStoreStream, storepass == null ? null : storepass.trim().toCharArray());
        } catch (IOException ex) {
            Logger.error("Unable to load https server keystore from " + keystoreUri);
            return;
        }
        keypass = config.getString("keypass").trim().toCharArray();
    }

    // Wire up the listening reactor
    lconf = config.configurationsAt("server");
    if ((lconf == null) || (lconf.size() != 1))
        throw new ConfigurationException("One (and only one) server configuration element is allowed.");
    else {
        Builder builder = IOReactorConfig.custom();
        builder.setIoThreadCount(ComputeReactorProcessors(config.getDouble("server[@cpu]", 0.667)));
        builder.setSoTimeout(config.getInt("server[@soTimeout]", 0));
        builder.setSoLinger(config.getInt("server[@soLinger]", -1));
        builder.setSoReuseAddress(true);
        builder.setTcpNoDelay(false);
        builder.setSelectInterval(100);

        IOReactorConfig rconfig = builder.build();
        Logger.info("Configuring server with options: " + rconfig.toString());
        listeningReactor = new DefaultListeningIOReactor(rconfig);

        lconf = config.configurationsAt("server.listen");
        InetSocketAddress addr;
        boolean hasNonWildcardSecure = false;
        LinkedHashMap<SocketAddress, SSLContext> addrSSLContext = new LinkedHashMap<SocketAddress, SSLContext>();
        if ((lconf == null) || (lconf.size() == 0)) {
            addr = new InetSocketAddress("127.0.0.1", 8080);
            ListenerEndpoint ep = listeningReactor.listen(addr);
            Logger.warn("Configured " + ep.getAddress());
        } else {
            TrustManager[] trustManagers = null;
            KeyManagerFactory kmf = null;
            // Create all the specified listeners.
            for (HierarchicalConfiguration hc : lconf) {
                String addrStr = hc.getString("[@address]");
                if ((addrStr == null) || (addrStr.length() == 0))
                    addrStr = "0.0.0.0";
                String alias = hc.getString("[@alias]");
                int port = hc.getInt("[@port]", alias != null ? 443 : 80);
                addr = new InetSocketAddress(addrStr, port);
                ListenerEndpoint ep = listeningReactor.listen(addr);
                String protocol = hc.containsKey("[@protocol]") ? hc.getString("[@protocol]") : null;
                Boolean secure = hc.containsKey("[@secure]") ? hc.getBoolean("[@secure]") : null;
                if ((alias != null) && (secure == null))
                    secure = true;
                if ((protocol != null) && (secure == null))
                    secure = true;
                if ((secure != null) && secure) {
                    if (protocol == null)
                        protocol = "TLS";
                    if (keystore == null)
                        throw new ConfigurationException(
                                "An https listening socket was requested, but no keystore was specified.");
                    if (kmf == null) {
                        kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
                        kmf.init(keystore, keypass);
                    }
                    // Are we going to trust all clients or just specific ones?
                    if (hc.getBoolean("[@trustAny]", true))
                        trustManagers = new TrustManager[] { new X509TrustAllManager() };
                    else {
                        TrustManagerFactory instance = TrustManagerFactory
                                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
                        instance.init(keystore);
                        trustManagers = instance.getTrustManagers();
                    }
                    KeyManager[] keyManagers = kmf.getKeyManagers();
                    if (alias != null)
                        for (int i = 0; i < keyManagers.length; i++) {
                            if (keyManagers[i] instanceof X509ExtendedKeyManager)
                                keyManagers[i] = new PokerFaceKeyManager(alias,
                                        (X509ExtendedKeyManager) keyManagers[i]);
                        }
                    SSLContext sslCtx = SSLContext.getInstance(protocol);
                    sslCtx.init(keyManagers, trustManagers, new SecureRandom());
                    if (addr.getAddress().isAnyLocalAddress()) {
                        // This little optimization helps us respond faster for every connection as we don't have to extrapolate a local connection address to wild card.
                        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en
                                .hasMoreElements();) {
                            NetworkInterface intf = en.nextElement();
                            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr
                                    .hasMoreElements();) {
                                addr = new InetSocketAddress(enumIpAddr.nextElement(), port);
                                addrSSLContext.put(addr, sslCtx);
                            }
                        }
                    } else {
                        addrSSLContext.put(addr, sslCtx);
                        hasNonWildcardSecure = true;
                    }
                }
                Logger.warn("Configured " + (alias == null ? "" : (protocol + " on")) + ep.getAddress());
            }
        }
        // We will need an HTTP protocol processor for the incoming connections
        String serverAgent = config.getString("server.serverAgent", "PokerFace/" + Utils.Version);
        HttpProcessor inhttpproc = new ImmutableHttpProcessor(
                new HttpResponseInterceptor[] { new ResponseDateInterceptor(), new ResponseServer(serverAgent),
                        new ResponseContent(), new ResponseConnControl() });
        HttpAsyncService serviceHandler = new HttpAsyncService(inhttpproc, new DefaultConnectionReuseStrategy(),
                null, handlerRegistry, null) {
            public void exception(final NHttpServerConnection conn, final Exception cause) {
                Logger.warn(cause.getMessage());
                super.exception(conn, cause);
            }
        };
        if (addrSSLContext.size() > 0) {
            final SSLContext defaultCtx = addrSSLContext.values().iterator().next();
            final Map<SocketAddress, SSLContext> sslMap;
            if ((!hasNonWildcardSecure) || (addrSSLContext.size() == 1))
                sslMap = null;
            else
                sslMap = addrSSLContext;
            listeningDispatcher = new DefaultHttpServerIODispatch(serviceHandler,
                    new SSLNHttpServerConnectionFactory(defaultCtx, null, ConnectionConfig.DEFAULT) {
                        protected SSLIOSession createSSLIOSession(IOSession iosession, SSLContext sslcontext,
                                SSLSetupHandler sslHandler) {
                            SSLIOSession retVal;
                            SSLContext sktCtx = sslcontext;
                            if (sslMap != null) {
                                SocketAddress la = iosession.getLocalAddress();
                                if (la != null) {
                                    sktCtx = sslMap.get(la);
                                    if (sktCtx == null)
                                        sktCtx = sslcontext;
                                }
                                retVal = new SSLIOSession(iosession, SSLMode.SERVER, sktCtx, sslHandler);
                            } else
                                retVal = super.createSSLIOSession(iosession, sktCtx, sslHandler);
                            if (sktCtx != null)
                                retVal.setAttribute("com.bytelightning.opensource.pokerface.secure", true);
                            return retVal;
                        }
                    });
        } else
            listeningDispatcher = new DefaultHttpServerIODispatch(serviceHandler, ConnectionConfig.DEFAULT);
    }

    // Configure the httpclient reactor that will be used to do reverse proxing to the specified targets.
    lconf = config.configurationsAt("targets");
    if ((lconf != null) && (lconf.size() > 0)) {
        HierarchicalConfiguration conf = lconf.get(0);
        Builder builder = IOReactorConfig.custom();
        builder.setIoThreadCount(ComputeReactorProcessors(config.getDouble("targets[@cpu]", 0.667)));
        builder.setSoTimeout(conf.getInt("targets[@soTimeout]", 0));
        builder.setSoLinger(config.getInt("targets[@soLinger]", -1));
        builder.setConnectTimeout(conf.getInt("targets[@connectTimeout]", 0));
        builder.setSoReuseAddress(true);
        builder.setTcpNoDelay(false);
        connectingReactor = new DefaultConnectingIOReactor(builder.build());

        final int bufferSize = conf.getInt("targets[@bufferSize]", 1024) * 1024;
        byteBufferPool = new SoftReferenceObjectPool<ByteBuffer>(new BasePooledObjectFactory<ByteBuffer>() {
            @Override
            public ByteBuffer create() throws Exception {
                return ByteBuffer.allocateDirect(bufferSize);
            }

            @Override
            public PooledObject<ByteBuffer> wrap(ByteBuffer buffer) {
                return new DefaultPooledObject<ByteBuffer>(buffer);
            }
        });

        KeyManager[] keyManagers = null;
        TrustManager[] trustManagers = null;

        if (keystore != null) {
            KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(keystore, keypass);
            keyManagers = kmf.getKeyManagers();
        }
        // Will the httpclient's trust any remote target, or only specific ones.
        if (conf.getBoolean("targets[@trustAny]", false))
            trustManagers = new TrustManager[] { new X509TrustAllManager() };
        else if (keystore != null) {
            TrustManagerFactory instance = TrustManagerFactory
                    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
            instance.init(keystore);
            trustManagers = instance.getTrustManagers();
        }
        SSLContext clientSSLContext = SSLContext.getInstance(conf.getString("targets[@protocol]", "TLS"));
        clientSSLContext.init(keyManagers, trustManagers, new SecureRandom());

        // Setup an SSL capable connection pool for the httpclients.
        connPool = new BasicNIOConnPool(connectingReactor,
                new BasicNIOConnFactory(clientSSLContext, null, ConnectionConfig.DEFAULT),
                conf.getInt("targets[@connectTimeout]", 0));
        connPool.setMaxTotal(conf.getInt("targets[@connMaxTotal]", 1023));
        connPool.setDefaultMaxPerRoute(conf.getInt("targets[@connMaxPerRoute]", 1023));

        // Set up HTTP protocol processor for outgoing connections
        String userAgent = conf.getString("targets.userAgent", "PokerFace/" + Utils.Version);
        HttpProcessor outhttpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
                new RequestContent(), new RequestTargetHost(), new RequestConnControl(),
                new RequestUserAgent(userAgent), new RequestExpectContinue(true) });
        executor = new HttpAsyncRequester(outhttpproc, new DefaultConnectionReuseStrategy());

        // Now set up all the configured targets.
        mappings = new LinkedHashMap<String, TargetDescriptor>();
        hosts = new ConcurrentHashMap<String, HttpHost>();
        String[] scheme = { null };
        String[] host = { null };
        int[] port = { 0 };
        String[] path = { null };
        int[] stripPrefixCount = { 0 };
        for (HierarchicalConfiguration targetConfig : conf.configurationsAt("target")) {
            String match = targetConfig.getString("[@pattern]");
            if ((match == null) || (match.trim().length() < 1)) {
                Logger.error("Unable to configure target;  Invalid url match pattern");
                continue;
            }
            String key = RequestForTargetConsumer.UriToTargetKey(targetConfig.getString("[@url]"), scheme, host,
                    port, path, stripPrefixCount);
            if (key == null) {
                Logger.error("Unable to configure target");
                continue;
            }
            HttpHost targetHost = hosts.get(key);
            if (targetHost == null) {
                targetHost = new HttpHost(host[0], port[0], scheme[0]);
                hosts.put(key, targetHost);
            }
            TargetDescriptor desc = new TargetDescriptor(targetHost, path[0], stripPrefixCount[0]);
            mappings.put(match, desc);
        }
        connectionDispatcher = new DefaultHttpClientIODispatch(new HttpAsyncRequestExecutor(),
                ConnectionConfig.DEFAULT);
    }
    // Allocate the script map which will be populated by it's own executor thread.
    if (config.containsKey("scripts.rootDirectory")) {
        Path tmp = Utils.MakePath(config.getProperty("scripts.rootDirectory"));
        if (!Files.exists(tmp))
            throw new FileNotFoundException("Scripts directory does not exist.");
        if (!Files.isDirectory(tmp))
            throw new FileNotFoundException("'scripts' path is not a directory.");
        scripts = new ConcurrentSkipListMap<String, ScriptObjectMirror>();
        boolean watch = config.getBoolean("scripts.dynamicWatch", false);
        List<Path> jsLibs;
        Object prop = config.getProperty("scripts.library");
        if (prop != null) {
            jsLibs = new ArrayList<Path>();
            if (prop instanceof Collection<?>) {
                @SuppressWarnings("unchecked")
                Collection<Object> oprop = (Collection<Object>) prop;
                for (Object obj : oprop)
                    jsLibs.add(Utils.MakePath(obj));
            } else {
                jsLibs.add(Utils.MakePath(prop));
            }
        } else
            jsLibs = null;

        lconf = config.configurationsAt("scripts.scriptConfig");
        if (lconf != null) {
            if (lconf.size() > 1)
                throw new ConfigurationException("Only one scriptConfig element is allowed.");
            if (lconf.size() == 0)
                lconf = null;
        }

        HierarchicalConfiguration scriptConfig;
        if (lconf == null)
            scriptConfig = new HierarchicalConfiguration();
        else
            scriptConfig = lconf.get(0);
        scriptConfig.setProperty("pokerface.scripts.rootDirectory", tmp.toString());

        configureScripts(jsLibs, scriptConfig, tmp, watch);
        if (watch)
            ScriptDirectoryWatcher = new DirectoryWatchService();
    }

    // Configure the static file directory (if any)
    Path staticFilesPath = null;
    if (config.containsKey("files.rootDirectory")) {
        Path tmp = Utils.MakePath(config.getProperty("files.rootDirectory"));
        if (!Files.exists(tmp))
            throw new FileNotFoundException("Files directory does not exist.");
        if (!Files.isDirectory(tmp))
            throw new FileNotFoundException("'files' path is not a directory.");
        staticFilesPath = tmp;
        List<HierarchicalConfiguration> mimeEntries = config.configurationsAt("files.mime-entry");
        if (mimeEntries != null) {
            for (HierarchicalConfiguration entry : mimeEntries) {
                entry.setDelimiterParsingDisabled(true);
                String type = entry.getString("[@type]", "").trim();
                if (type.length() == 0)
                    throw new ConfigurationException("Invalid mime type entry");
                String extensions = entry.getString("[@extensions]", "").trim();
                if (extensions.length() == 0)
                    throw new ConfigurationException("Invalid mime extensions for: " + type);
                ScriptHelperImpl.AddMimeEntry(type, extensions);
            }
        }
    }

    handlerRegistry.register("/*",
            new RequestHandler(executor, connPool, byteBufferPool, staticFilesPath, mappings,
                    scripts != null ? Collections.unmodifiableNavigableMap(scripts) : null,
                    config.getBoolean("scripts.allowScriptsToSpecifyDynamicHosts", false) ? hosts : null));
}

From source file:com.graphhopper.jsprit.core.algorithm.io.VehicleRoutingAlgorithms.java

private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig,
        final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager,
        final StateManager routeStates, Set<PrioritizedVRAListener> algorithmListeners, TypedMap definedClasses,
        ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager,
        boolean addDefaultCostCalculators) {
    String moduleName = moduleConfig.getString("[@name]");
    if (moduleName == null)
        throw new IllegalStateException("module(-name) is missing.");
    String moduleId = moduleConfig.getString("[@id]");
    if (moduleId == null)
        moduleId = "noId";
    ModKey modKey = makeKey(moduleName, moduleId);
    StrategyModuleKey strategyModuleKey = new StrategyModuleKey(modKey);
    SearchStrategyModule definedModule = definedClasses.get(strategyModuleKey);
    if (definedModule != null)
        return definedModule;

    if (moduleName.equals("ruin_and_recreate")) {
        String ruin_name = moduleConfig.getString("ruin[@name]");
        if (ruin_name == null)
            throw new IllegalStateException("module.ruin[@name] is missing.");
        String ruin_id = moduleConfig.getString("ruin[@id]");
        if (ruin_id == null)
            ruin_id = "noId";
        String shareToRuinString = moduleConfig.getString("ruin.share");
        if (shareToRuinString == null)
            throw new IllegalStateException("module.ruin.share is missing.");
        double shareToRuin = Double.valueOf(shareToRuinString);
        final RuinStrategy ruin;
        ModKey ruinKey = makeKey(ruin_name, ruin_id);
        if (ruin_name.equals("randomRuin")) {
            ruin = getRandomRuin(vrp, routeStates, definedClasses, ruinKey, shareToRuin);
        } else if (ruin_name.equals("radialRuin")) {
            JobDistance jobDistance = new AvgServiceAndShipmentDistance(vrp.getTransportCosts());
            ruin = getRadialRuin(vrp, routeStates, definedClasses, ruinKey, shareToRuin, jobDistance);
        } else//w w w. j a va2s  . c  o  m
            throw new IllegalStateException(
                    "ruin[@name] " + ruin_name + " is not known. Use either randomRuin or radialRuin.");

        String insertionName = moduleConfig.getString("insertion[@name]");
        if (insertionName == null)
            throw new IllegalStateException(
                    "module.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\"");
        String insertionId = moduleConfig.getString("insertion[@id]");
        if (insertionId == null)
            insertionId = "noId";
        ModKey insertionKey = makeKey(insertionName, insertionId);
        InsertionStrategyKey insertionStrategyKey = new InsertionStrategyKey(insertionKey);
        InsertionStrategy insertion = definedClasses.get(insertionStrategyKey);
        if (insertion == null) {
            List<HierarchicalConfiguration> insertionConfigs = moduleConfig.configurationsAt("insertion");
            if (insertionConfigs.size() != 1)
                throw new IllegalStateException("this should be 1");
            List<PrioritizedVRAListener> prioListeners = new ArrayList<PrioritizedVRAListener>();
            insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, routeStates,
                    prioListeners, executorService, nuOfThreads, constraintManager, addDefaultCostCalculators);
            algorithmListeners.addAll(prioListeners);
        }
        final InsertionStrategy final_insertion = insertion;

        RuinAndRecreateModule rrModule = new RuinAndRecreateModule("ruin_and_recreate", final_insertion, ruin);
        return rrModule;
    }
    throw new NullPointerException("no module found with moduleName=" + moduleName
            + "\n\tcheck config whether the correct names are used"
            + "\n\tcurrently there are following modules available: " + "\n\tbestInsertion" + "\n\trandomRuin"
            + "\n\tradialRuin");
}

From source file:com.graphhopper.jsprit.io.algorithm.VehicleRoutingAlgorithms.java

private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig,
        final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager,
        final StateManager routeStates, Set<PrioritizedVRAListener> algorithmListeners, TypedMap definedClasses,
        ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager,
        boolean addDefaultCostCalculators) {
    String moduleName = moduleConfig.getString("[@name]");
    if (moduleName == null)
        throw new IllegalStateException("module(-name) is missing.");
    String moduleId = moduleConfig.getString("[@id]");
    if (moduleId == null)
        moduleId = "noId";
    ModKey modKey = makeKey(moduleName, moduleId);
    StrategyModuleKey strategyModuleKey = new StrategyModuleKey(modKey);
    SearchStrategyModule definedModule = definedClasses.get(strategyModuleKey);
    if (definedModule != null)
        return definedModule;

    if (moduleName.equals("ruin_and_recreate")) {
        String ruin_name = moduleConfig.getString("ruin[@name]");
        if (ruin_name == null)
            throw new IllegalStateException("module.ruin[@name] is missing.");
        String ruin_id = moduleConfig.getString("ruin[@id]");
        if (ruin_id == null)
            ruin_id = "noId";
        final RuinStrategy ruin;
        ModKey ruinKey = makeKey(ruin_name, ruin_id);
        if (ruin_name.equals("randomRuin")) {
            String shareToRuinString = moduleConfig.getString("ruin.share");
            if (shareToRuinString == null)
                throw new IllegalStateException("module.ruin.share is missing.");
            double shareToRuin = Double.valueOf(shareToRuinString);
            ruin = getRandomRuin(vrp, routeStates, definedClasses, ruinKey, shareToRuin);
        } else if (ruin_name.equals("radialRuin")) {
            String shareToRuinString = moduleConfig.getString("ruin.share");
            if (shareToRuinString == null)
                throw new IllegalStateException("module.ruin.share is missing.");
            double shareToRuin = Double.valueOf(shareToRuinString);
            JobDistance jobDistance = new AvgServiceAndShipmentDistance(vrp.getTransportCosts());
            ruin = getRadialRuin(vrp, routeStates, definedClasses, ruinKey, shareToRuin, jobDistance);
        } else if (ruin_name.equals("clusterRuin")) {
            String initialNumberJobsToRemoveString = moduleConfig.getString("ruin.initRemoveJobs");
            if (initialNumberJobsToRemoveString == null)
                throw new IllegalStateException("module.ruin.initRemoveJobs is missing.");
            int initialNumberJobsToRemove = Integer.valueOf(initialNumberJobsToRemoveString);
            ruin = getClusterRuin(vrp, routeStates, definedClasses, ruinKey, initialNumberJobsToRemove);
        } else//ww w .  j  a v  a2s  . co m
            throw new IllegalStateException(
                    "ruin[@name] " + ruin_name + " is not known. Use either randomRuin or radialRuin.");

        String insertionName = moduleConfig.getString("insertion[@name]");
        if (insertionName == null)
            throw new IllegalStateException(
                    "module.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\"");
        String insertionId = moduleConfig.getString("insertion[@id]");
        if (insertionId == null)
            insertionId = "noId";
        ModKey insertionKey = makeKey(insertionName, insertionId);
        InsertionStrategyKey insertionStrategyKey = new InsertionStrategyKey(insertionKey);
        InsertionStrategy insertion = definedClasses.get(insertionStrategyKey);
        if (insertion == null) {
            List<HierarchicalConfiguration> insertionConfigs = moduleConfig.configurationsAt("insertion");
            if (insertionConfigs.size() != 1)
                throw new IllegalStateException("this should be 1");
            List<PrioritizedVRAListener> prioListeners = new ArrayList<PrioritizedVRAListener>();
            insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, routeStates,
                    prioListeners, executorService, nuOfThreads, constraintManager, addDefaultCostCalculators);
            algorithmListeners.addAll(prioListeners);
        }
        final InsertionStrategy final_insertion = insertion;

        RuinAndRecreateModule rrModule = new RuinAndRecreateModule("ruin_and_recreate", final_insertion, ruin);
        return rrModule;
    }
    throw new NullPointerException("no module found with moduleName=" + moduleName
            + "\n\tcheck config whether the correct names are used"
            + "\n\tcurrently there are following modules available: " + "\n\tbestInsertion" + "\n\trandomRuin"
            + "\n\tradialRuin" + "\n\tclusterRuin");
}