/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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.openengsb.core.persistence.internal;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.openengsb.core.api.persistence.PersistenceManager;
import org.openengsb.core.api.persistence.PersistenceService;
import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DefaultPersistenceManager implements PersistenceManager {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPersistenceManager.class);
private String persistenceRootDir;
private final Map<String, PersistenceService> persistenceServices = new HashMap<String, PersistenceService>();
public DefaultPersistenceManager() {
}
@Override
public synchronized PersistenceService getPersistenceForBundle(Bundle bundle) {
checkRootDirCreated();
String dbFile = new File(getAbsoluteRootDir(), getFileName(bundle)).getPath();
if (persistenceServices.containsKey(dbFile)) {
return persistenceServices.get(dbFile);
}
new File(dbFile).mkdirs();
PersistenceService bundleService =
new DefaultPersistenceService(new File(dbFile), new DefaultObjectPersistenceBackend(bundle),
new DefaultPersistenceIndex(new File(dbFile), new DefaultObjectPersistenceBackend(bundle)));
persistenceServices.put(dbFile, bundleService);
return bundleService;
}
private void checkRootDirCreated() {
File rootDir = getAbsoluteRootDir();
if (rootDir.exists()) {
return;
}
rootDir.mkdirs();
}
private File getAbsoluteRootDir() {
String karafData = System.getProperty("karaf.data");
LOGGER.info("karafData: {}", karafData);
return new File(karafData, persistenceRootDir);
}
private String getFileName(Bundle bundle) {
final String name = bundle.getSymbolicName() + ".data";
LOGGER.info("generated persitence-filename: {}", name);
return name;
}
public void setPersistenceRootDir(String persistenceRootDir) {
this.persistenceRootDir = persistenceRootDir;
}
}