/* * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * 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 org.optaplanner.examples.common.persistence; import java.io.File; import org.optaplanner.core.api.domain.solution.PlanningSolution; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @param <Solution_> the solution type, the class with the {@link PlanningSolution} annotation */ public abstract class AbstractSolutionDao<Solution_> implements SolutionDao<Solution_> { /** * The path to the data directory, preferably with unix slashes for portability. * For example: -D{@value #DATA_DIR_SYSTEM_PROPERTY}=sources/data/ */ public static final String DATA_DIR_SYSTEM_PROPERTY = "org.optaplanner.examples.dataDir"; protected final transient Logger logger = LoggerFactory.getLogger(getClass()); protected String dirName; protected File dataDir; public AbstractSolutionDao(String dirName) { this.dirName = dirName; String dataDirPath = System.getProperty(DATA_DIR_SYSTEM_PROPERTY, "data/"); dataDir = new File(dataDirPath, dirName); if (!dataDir.exists()) { throw new IllegalStateException("The directory dataDir (" + dataDir.getAbsolutePath() + ") does not exist.\n" + " Either the working directory should be set to the directory that contains the data directory" + " (which is not the data directory itself), or the system property " + DATA_DIR_SYSTEM_PROPERTY + " should be set properly.\n" + " The data directory is different in a git clone (optaplanner/optaplanner-examples/data)" + " and in a release zip (examples/sources/data).\n" + " In an IDE (IntelliJ, Eclipse, NetBeans), open the \"Run configuration\"" + " to change \"Working directory\" (or add the system property in \"VM options\")."); } } @Override public String getDirName() { return dirName; } @Override public File getDataDir() { return dataDir; } }