// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.back;
import com.google.common.collect.*;
import fi.hsl.parkandride.core.back.ContactRepository;
import fi.hsl.parkandride.core.back.FacilityRepository;
import fi.hsl.parkandride.core.back.HubRepository;
import fi.hsl.parkandride.core.back.OperatorRepository;
import fi.hsl.parkandride.core.domain.*;
import fi.hsl.parkandride.core.service.TransactionalWrite;
import org.geolatte.geom.Point;
import org.geolatte.geom.Polygon;
import javax.inject.Inject;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import static fi.hsl.parkandride.core.domain.CapacityType.CAR;
import static fi.hsl.parkandride.core.domain.CapacityType.ELECTRIC_CAR;
import static fi.hsl.parkandride.core.domain.DayType.SATURDAY;
import static fi.hsl.parkandride.core.domain.DayType.SUNDAY;
import static fi.hsl.parkandride.core.domain.FacilityStatus.EXCEPTIONAL_SITUATION;
import static fi.hsl.parkandride.core.domain.Service.*;
import static fi.hsl.parkandride.core.domain.Spatial.fromWkt;
import static fi.hsl.parkandride.core.domain.Usage.PARK_AND_RIDE;
import static java.util.Arrays.asList;
public class Dummies {
@Inject ContactRepository contactDao;
@Inject FacilityRepository facilityDao;
@Inject OperatorRepository operatorDao;
@Inject HubRepository hubDao;
@TransactionalWrite
public long createHub(Long... facilityIds) {
return createHub(new MultilingualString("Malmi"), facilityIds);
}
@TransactionalWrite
public long createHub(MultilingualString name, Long... facilityIds) {
final Hub hub = new Hub();
hub.name = name;
hub.location = (Point) fromWkt("POINT(25.010563 60.251022)");
hub.facilityIds = ImmutableSet.of(1L, 2L, 3L);
hub.address = new Address(new MultilingualString("street"), "00100", new MultilingualString("city"));
hub.facilityIds = Sets.newHashSet(facilityIds);
return hubDao.insertHub(hub);
}
@TransactionalWrite
public long createFacility() {
Long operatorId = createDummyOperator();
FacilityContacts contacts = new FacilityContacts(createDummyContact(), createDummyContact(), createDummyContact());
Facility facility = createFacility(operatorId, contacts);
return facilityDao.insertFacility(facility);
}
@TransactionalWrite
public Long createDummyOperator() {
Operator operator = new Operator("SMOOTH" + uniqueNumber());
return operatorDao.insertOperator(operator);
}
@TransactionalWrite
public Long createDummyContact() {
Contact contact = new Contact();
contact.name = new MultilingualString("TEST " + uniqueNumber());
contact.email = "test@example.com";
contact.phone = new Phone("09 4766 4000");
contact.address = new Address(new MultilingualString("street"), "00100", new MultilingualString("city"));
contact.info = new MultilingualString("info");
contact.openingHours = new MultilingualString("opening hours");
return contactDao.insertContact(contact);
}
@TransactionalWrite
public Facility createFacility(Long operatorId, FacilityContacts contacts) {
Facility facility = new Facility();
facility.id = 0L;
facility.name = new MultilingualString("Facility " + uniqueNumber());
facility.location = (Polygon) Spatial.fromWkt("POLYGON((" +
"25.010822 60.25054, " +
"25.010822 60.250023, " +
"25.012479 60.250337, " +
"25.011449 60.250885, " +
"25.010822 60.25054))");
facility.operatorId = operatorId;
facility.status = EXCEPTIONAL_SITUATION;
facility.pricingMethod = PricingMethod.CUSTOM;
facility.statusDescription = new MultilingualString("Status description");
facility.aliases = ImmutableSortedSet.of("alias", "blias");
facility.ports = ImmutableList.of(new Port((Point) Spatial.fromWkt("POINT(25.010822 60.25054)"), true, false, true, false, "street", "00100", "city", "info"));
facility.services = new NullSafeSortedSet<>(asList(ELEVATOR, TOILETS, ACCESSIBLE_TOILETS));
facility.contacts = contacts;
facility.builtCapacity = ImmutableMap.of(
CAR, 50,
ELECTRIC_CAR, 2
);
// pricing in wrong order should be sorted on load
facility.pricing.add(new Pricing(CAR, PARK_AND_RIDE, 50, SUNDAY, "8", "18", "1 EUR/H"));
facility.pricing.add(new Pricing(CAR, PARK_AND_RIDE, 50, SATURDAY, "8", "18", "2 EUR/H"));
facility.unavailableCapacities = Arrays.asList(
new UnavailableCapacity(CAR, PARK_AND_RIDE, 1)
);
facility.openingHours.info = new MultilingualString("Opening Hours");
facility.openingHours.url = new MultilingualUrl("http://www.hsl.fi");
facility.paymentInfo.detail = new MultilingualString("Payment details");
facility.paymentInfo.url = new MultilingualUrl("http://www.hsl.fi");
return facility;
}
private static final AtomicInteger seq = new AtomicInteger(0);
private String uniqueNumber() {
return String.format("%04d", seq.incrementAndGet());
}
}