You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/09/12 16:42:52 UTC
svn commit: r996322 - in
/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl:
./ config/
Author: cziegeler
Date: Sun Sep 12 14:42:51 2010
New Revision: 996322
URL: http://svn.apache.org/viewvc?rev=996322&view=rev
Log:
SLING-1737 : Add state management for resources
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigurationPid.java
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java?rev=996322&r1=996321&r2=996322&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java Sun Sep 12 14:42:51 2010
@@ -44,12 +44,14 @@ public interface RegisteredResource exte
/** Attribute key: configuration pid */
String CONFIG_PID_ATTRIBUTE = "config.pid";
+ String getScheme();
+
/**
- * Return this data's id. It is opaque for the {@link OsgiInstaller}
+ * Return this data's url. It is opaque for the {@link OsgiInstaller}
* but should uniquely identify the resource within the namespace of
* the used installation mechanism.
*/
- String getId();
+ String getURL();
/**
* Return the type of this resource.
@@ -89,9 +91,6 @@ public interface RegisteredResource exte
*/
int getPriority();
void cleanup();
- String getURL();
-
- String getScheme();
/** Attributes include the bundle symbolic name, bundle version, etc. */
Map<String, Object> getAttributes();
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java?rev=996322&r1=996321&r2=996322&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java Sun Sep 12 14:42:51 2010
@@ -60,8 +60,8 @@ public class RegisteredResourceImpl
private static final long serialVersionUID = 4L;
- /** The resource id. */
- private final String id;
+ /** The resource url. */
+ private final String url;
/** The installer scheme. */
private final String urlScheme;
/** The digest for the resource. */
@@ -136,7 +136,7 @@ public class RegisteredResourceImpl
final String digest,
final int priority,
final String scheme) throws IOException {
- this.id = id;
+ this.url = scheme + ':' + id;
this.urlScheme = scheme;
this.resourceType = type;
this.priority = priority;
@@ -151,7 +151,7 @@ public class RegisteredResourceImpl
final String name = (String)attributes.get(Constants.BUNDLE_SYMBOLICNAME);
if (name == null) {
// not a bundle
- throw new IOException("Bundle resource does not contain a bundle " + this.urlScheme + ":" + this.id);
+ throw new IOException("Bundle resource does not contain a bundle " + this.url);
}
this.digest = (digest != null && digest.length() > 0 ? digest : id + ":" + computeDigest(this.dataFile));
entity = ENTITY_BUNDLE_PREFIX + name;
@@ -209,7 +209,7 @@ public class RegisteredResourceImpl
* @see org.apache.sling.osgi.installer.impl.RegisteredResource#getURL()
*/
public String getURL() {
- return this.getScheme() + ':' + this.getId();
+ return this.url;
}
/**
@@ -272,13 +272,6 @@ public class RegisteredResourceImpl
return result;
}
- /**
- * @see org.apache.sling.osgi.installer.impl.RegisteredResource#getId()
- */
- public String getId() {
- return id;
- }
-
/**
* @see org.apache.sling.osgi.installer.impl.RegisteredResource#getType()
*/
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java?rev=996322&r1=996321&r2=996322&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/AbstractConfigTask.java Sun Sep 12 14:42:51 2010
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
+import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
@@ -67,7 +68,15 @@ abstract class AbstractConfigTask extend
Configuration result = null;
if (cp.getFactoryPid() == null) {
- result = ca.getConfiguration(cp.getConfigPid(), null);
+ if ( createIfNeeded ) {
+ result = ca.getConfiguration(cp.getConfigPid(), null);
+ } else {
+ String filter = "(" + Constants.SERVICE_PID + "=" + cp.getConfigPid() + ")";
+ Configuration[] configs = ca.listConfigurations( filter );
+ if ( configs != null && configs.length > 0 ) {
+ result = configs[0];
+ }
+ }
} else {
Configuration configs[] = ca.listConfigurations(
"(|(" + ConfigurationPid.ALIAS_KEY
@@ -75,7 +84,7 @@ abstract class AbstractConfigTask extend
+ "))");
if (configs == null || configs.length == 0) {
- if(createIfNeeded) {
+ if (createIfNeeded) {
result = ca.createFactoryConfiguration(cp.getConfigPid(), null);
}
} else {
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java?rev=996322&r1=996321&r2=996322&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigTaskCreator.java Sun Sep 12 14:42:51 2010
@@ -54,10 +54,12 @@ public class ConfigTaskCreator {
* Create a task to install or uninstall a configuration.
*/
public OsgiInstallerTask createTask(final RegisteredResource toActivate) {
+ // if there is no config admin, just return
+ // if ( this.configAdminServiceTracker.getService() == null ) {
+ // return null;
+ // }
final OsgiInstallerTask result;
if (toActivate.getState() == RegisteredResource.State.UNINSTALL) {
- // None of our resources are installable, remove corresponding config
- // (task simply does nothing if config does not exist)
result = new ConfigRemoveTask(toActivate, this.configAdminServiceTracker);
} else {
result = new ConfigInstallTask(toActivate, this.configAdminServiceTracker);
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigurationPid.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigurationPid.java?rev=996322&r1=996321&r2=996322&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigurationPid.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/config/ConfigurationPid.java Sun Sep 12 14:42:51 2010
@@ -43,7 +43,7 @@ public class ConfigurationPid implements
pid = pid.substring(slashPos + 1);
}
// remove extension
- if ( RegisteredResourceImpl. isConfigExtension(RegisteredResourceImpl.getExtension(pid))) {
+ if ( RegisteredResourceImpl.isConfigExtension(RegisteredResourceImpl.getExtension(pid))) {
final int lastDot = pid.lastIndexOf('.');
pid = pid.substring(0, lastDot);
}