You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/05/05 16:32:11 UTC
[2/9] karaf-cave git commit: [KARAF-3712] Register Repository services
[KARAF-3712] Register Repository services
Project: http://git-wip-us.apache.org/repos/asf/karaf-cave/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cave/commit/450f5512
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cave/tree/450f5512
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cave/diff/450f5512
Branch: refs/heads/master
Commit: 450f5512d4913aa8b01a41c6f5d50091af21226f
Parents: c610b47
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Thu Apr 30 21:47:06 2015 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Thu Apr 30 21:47:06 2015 +0200
----------------------------------------------------------------------
.../cave/server/storage/CaveRepositoryImpl.java | 4 ++
.../storage/CaveRepositoryServiceImpl.java | 59 ++++++++++++++++----
.../OSGI-INF/blueprint/cave-storage.xml | 1 +
3 files changed, 52 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/450f5512/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java
----------------------------------------------------------------------
diff --git a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java
index f0c4e06..9230dea 100644
--- a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java
+++ b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryImpl.java
@@ -76,6 +76,10 @@ public class CaveRepositoryImpl extends CaveRepository {
}
}
+ public OsgiRepository getRepository() {
+ return repository;
+ }
+
/**
* Check if the repository folder exists and create it if not.
*/
http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/450f5512/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryServiceImpl.java b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryServiceImpl.java
index 557b51f..b720c77 100644
--- a/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryServiceImpl.java
+++ b/server/storage/src/main/java/org/apache/karaf/cave/server/storage/CaveRepositoryServiceImpl.java
@@ -18,11 +18,16 @@ package org.apache.karaf.cave.server.storage;
import org.apache.karaf.cave.server.api.CaveRepository;
import org.apache.karaf.cave.server.api.CaveRepositoryService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.repository.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
@@ -35,9 +40,13 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
public static final String STORAGE_FILE = "repositories.properties";
+ private BundleContext bundleContext;
+
private File storageLocation;
- private Map<String, CaveRepository> repositories = new HashMap<String, CaveRepository>();
+ private final Map<String, CaveRepositoryImpl> repositories = new HashMap<>();
+
+ private final Map<String, ServiceRegistration<Repository>> services = new HashMap<>();
public File getStorageLocation() {
return this.storageLocation;
@@ -47,6 +56,14 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
this.storageLocation = storageLocation;
}
+ public BundleContext getBundleContext() {
+ return bundleContext;
+ }
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
/**
* Create a Cave repository.
*
@@ -57,7 +74,7 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
*/
public synchronized CaveRepository create(String name, boolean scan) throws Exception {
File location = new File(storageLocation, name);
- return this.create(name, location.getAbsolutePath(), scan);
+ return create(name, location.getAbsolutePath(), scan);
}
/**
@@ -73,7 +90,7 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
if (repositories.get(name) != null) {
throw new IllegalArgumentException("Cave repository " + name + " already exists");
}
- CaveRepository repository = new CaveRepositoryImpl(name, location, scan);
+ CaveRepositoryImpl repository = new CaveRepositoryImpl(name, location, scan);
repositories.put(name, repository);
save();
return repository;
@@ -86,11 +103,14 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @throws Exception in case of remove failure.
*/
public synchronized void uninstall(String name) throws Exception {
- CaveRepository repository = this.getRepository(name);
+ CaveRepository repository = getRepository(name);
if (repository == null) {
throw new IllegalArgumentException("Cave repository " + name + " doesn't exist");
}
- // TODO: unregister Repository service
+ ServiceRegistration<Repository> registration = services.remove(name);
+ if (registration != null) {
+ registration.unregister();
+ }
save();
}
@@ -100,11 +120,12 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @throws Exception
*/
public synchronized void remove(String name) throws Exception {
- CaveRepository repository = this.getRepository(name);
+ CaveRepository repository = getRepository(name);
if (repository == null) {
throw new IllegalArgumentException("Cave repository " + name + " doesn't exist");
}
repositories.remove(name);
+ save();
}
/**
@@ -115,12 +136,13 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @throws Exception
*/
public synchronized void destroy(String name) throws Exception {
- CaveRepository repository = this.getRepository(name);
+ CaveRepository repository = getRepository(name);
if (repository == null) {
throw new IllegalArgumentException("Cave repository " + name + " doesn't exist");
}
repositories.remove(name);
repository.cleanup();
+ save();
}
/**
@@ -131,11 +153,19 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @throws Exception in case of registration failure.
*/
public synchronized void install(String name) throws Exception {
- CaveRepository caveRepository = this.getRepository(name);
+ CaveRepositoryImpl caveRepository = getRepository(name);
if (caveRepository == null) {
throw new IllegalArgumentException("Cave repository " + name + " doesn't exist");
}
- // TODO: register the Repository service
+ ServiceRegistration<Repository> registration = services.get(name);
+ if (registration == null) {
+ Hashtable<String, String> props = new Hashtable<>();
+ props.put(Constants.SERVICE_DESCRIPTION, name);
+ props.put(Repository.URL, caveRepository.getLocation());
+ registration = bundleContext.registerService(Repository.class, caveRepository.getRepository(), props);
+ services.put(name, registration);
+ }
+ save();
}
/**
@@ -144,7 +174,7 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @return the list of all Cave repositories.
*/
public synchronized CaveRepository[] getRepositories() {
- return repositories.values().toArray(new CaveRepository[0]);
+ return repositories.values().toArray(new CaveRepository[repositories.size()]);
}
/**
@@ -153,7 +183,7 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
* @param name the name of the Cave repository to look for.
* @return the corresponding Cave repository.
*/
- public synchronized CaveRepository getRepository(String name) {
+ public synchronized CaveRepositoryImpl getRepository(String name) {
return repositories.get(name);
}
@@ -167,6 +197,7 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
for (int i = 0; i < repositories.length; i++) {
storage.setProperty("item." + i + ".name", repositories[i].getName());
storage.setProperty("item." + i + ".location", repositories[i].getLocation());
+ storage.setProperty("item." + i + ".installed", Boolean.toString(services.containsKey(repositories[i].getName())));
}
saveStorage(storage, new File(storageLocation, STORAGE_FILE), "Cave Service storage");
}
@@ -226,9 +257,13 @@ public class CaveRepositoryServiceImpl implements CaveRepositoryService {
for (int i = 0; i < count; i++) {
String name = storage.getProperty("item." + i + ".name");
String location = storage.getProperty("item." + i + ".location");
+ boolean installed = Boolean.parseBoolean(storage.getProperty("item." + i + ".installed"));
if (name != null) {
- CaveRepository repository = new CaveRepositoryImpl(name, location, false);
+ CaveRepositoryImpl repository = new CaveRepositoryImpl(name, location, false);
repositories.put(name, repository);
+ if (installed) {
+ install(name);
+ }
}
}
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/450f5512/server/storage/src/main/resources/OSGI-INF/blueprint/cave-storage.xml
----------------------------------------------------------------------
diff --git a/server/storage/src/main/resources/OSGI-INF/blueprint/cave-storage.xml b/server/storage/src/main/resources/OSGI-INF/blueprint/cave-storage.xml
index 1abcf71..554861d 100644
--- a/server/storage/src/main/resources/OSGI-INF/blueprint/cave-storage.xml
+++ b/server/storage/src/main/resources/OSGI-INF/blueprint/cave-storage.xml
@@ -31,6 +31,7 @@
<bean id="caveRepositoryService" class="org.apache.karaf.cave.server.storage.CaveRepositoryServiceImpl" init-method="init">
<property name="storageLocation" value="${storage.location}"/>
+ <property name="bundleContext" ref="blueprintBundleContext"/>
</bean>
<service ref="caveRepositoryService" interface="org.apache.karaf.cave.server.api.CaveRepositoryService"/>