Author: jawi
Date: Tue Jul 25 11:58:04 2017
New Revision: 1802921
URL: http://svn.apache.org/viewvc?rev=1802921&view=rev
Log:
ACE-627 allow ordering of artifact data to be defined
- introduced an ArtifactDataHelper service that DeploymentProviders can use to
define a particular order for the artifacts that are being returned by it.
Added:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java
(with props)
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java
(with props)
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java
(with props)
Modified:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/Activator.java
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/FileBasedProvider.java
ace/trunk/org.apache.ace.deployment.itest/test/org/apache/ace/it/deployment/provider/filebased/FileBasedProviderTest.java
ace/trunk/org.apache.ace.deployment/provider.api.bnd
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/DeploymentProvider.java
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/packageinfo
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/Activator.java
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProvider.java
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderPerformanceTest.java
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderTest.java
Modified:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/Activator.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/Activator.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/Activator.java
(original)
+++
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/Activator.java
Tue Jul 25 11:58:04 2017
@@ -18,6 +18,7 @@
*/
package org.apache.ace.it.deployment.provider.filebased;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
@@ -33,15 +34,18 @@ public class Activator extends Dependenc
.setInterface(DeploymentProvider.class.getName(), null)
.setImplementation(FileBasedProvider.class)
.add(createConfigurationDependency()
- .setPid(PID)
- )
- .add(createServiceDependency()
- .setService(LogService.class)
- .setRequired(false)));
+ .setPid(PID))
+ .add(createServiceDependency()
+ .setService(ArtifactDataHelper.class)
+ .setDefaultImplementation(NoOpArtifactDataHelper.class)
+ .setRequired(false))
+ .add(createServiceDependency()
+ .setService(LogService.class)
+ .setRequired(false)));
}
@Override
public void destroy(BundleContext arg0, DependencyManager arg1) throws
Exception {
// TODO Auto-generated method stub
}
-}
\ No newline at end of file
+}
Modified:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/FileBasedProvider.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/FileBasedProvider.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/FileBasedProvider.java
(original)
+++
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/FileBasedProvider.java
Tue Jul 25 11:58:04 2017
@@ -40,6 +40,7 @@ import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.ace.deployment.provider.OverloadedException;
import org.apache.ace.deployment.provider.impl.ArtifactDataImpl;
@@ -66,14 +67,17 @@ public class FileBasedProvider implement
private static final int OSGI_R4_MANIFEST_VERSION = 2;
private volatile File m_baseDirectory;
private volatile File m_defaultDirectory;
+
+ private volatile ArtifactDataHelper m_artifactDataHelper;
private volatile LogService m_log;
+
private final Semaphore m_disk = new Semaphore(1, true);
-
+
private final AtomicInteger m_usageCounter = new AtomicInteger();
/** Maximum number of concurrent users. Value 0 is used for unlimited
users. */
private int m_maximumNumberOfUsers = 0;
/** The default backoff time for each new user over the limit */
- private static final int BACKOFF_TIME_PER_USER = 5;
+ private static final int BACKOFF_TIME_PER_USER = 5;
/**
* Get the bundle data from the bundles in the <data
dir>/<target>/<version> directory It reads the manifest from all
the
@@ -85,7 +89,8 @@ public class FileBasedProvider implement
if (m_maximumNumberOfUsers != 0 && m_maximumNumberOfUsers <
concurrentUsers) {
throw new OverloadedException("Too many users, maximum allowed
= " + m_maximumNumberOfUsers + ", current = " + concurrentUsers,
(concurrentUsers - m_maximumNumberOfUsers) * BACKOFF_TIME_PER_USER);
}
- return internalGetBundleData(targetId, version);
+
+ return
m_artifactDataHelper.process(internalGetBundleData(targetId, version),
targetId, null, version);
} finally {
m_usageCounter.getAndDecrement();
}
@@ -147,7 +152,7 @@ public class FileBasedProvider implement
}
List<ArtifactData> dataVersionFrom =
internalGetBundleData(targetId, versionFrom);
List<ArtifactData> dataVersionTo = internalGetBundleData(targetId,
versionTo);
-
+
Iterator<ArtifactData> it = dataVersionTo.iterator();
while (it.hasNext()) {
ArtifactDataImpl bundleDataVersionTo = (ArtifactDataImpl)
it.next();
@@ -155,7 +160,7 @@ public class FileBasedProvider implement
ArtifactData bundleDataVersionFrom =
getBundleData(bundleDataVersionTo.getSymbolicName(), dataVersionFrom);
bundleDataVersionTo.setChanged(!bundleDataVersionTo.equals(bundleDataVersionFrom));
}
- return dataVersionTo;
+ return m_artifactDataHelper.process(dataVersionTo, targetId,
versionFrom, versionTo);
} finally {
m_usageCounter.getAndDecrement();
}
@@ -198,7 +203,7 @@ public class FileBasedProvider implement
// try the default
getVersions(targetId, versionList, m_defaultDirectory);
}
-
+
// now sort the list of versions and convert all values to strings.
Collections.sort(versionList);
List<String> stringVersionList = new ArrayList<>();
@@ -341,7 +346,7 @@ public class FileBasedProvider implement
return bundleData;
}
-
+
/**
*
* @param targetId ID that requested versions
@@ -381,7 +386,7 @@ public class FileBasedProvider implement
if (maximumNumberOfUsers != null) {
m_maximumNumberOfUsers =
Integer.parseInt(maximumNumberOfUsers);
}
-
+
String baseDirectoryName = getNotNull(settings, DIRECTORY_NAME,
"The base directory cannot be null");
File baseDirectory = new File(baseDirectoryName);
if (!baseDirectory.exists() || !baseDirectory.isDirectory()) {
Added:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java?rev=1802921&view=auto
==============================================================================
---
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java
(added)
+++
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java
Tue Jul 25 11:58:04 2017
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.apache.ace.it.deployment.provider.filebased;
+
+import java.util.List;
+
+import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
+
+public class NoOpArtifactDataHelper implements ArtifactDataHelper {
+
+ @Override
+ public List<ArtifactData> process(List<ArtifactData> artifacts, String
targetId, String versionFrom, String versionTo) {
+ return artifacts;
+ }
+
+}
\ No newline at end of file
Propchange:
ace/trunk/org.apache.ace.deployment.itest/src/org/apache/ace/it/deployment/provider/filebased/NoOpArtifactDataHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
ace/trunk/org.apache.ace.deployment.itest/test/org/apache/ace/it/deployment/provider/filebased/FileBasedProviderTest.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment.itest/test/org/apache/ace/it/deployment/provider/filebased/FileBasedProviderTest.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment.itest/test/org/apache/ace/it/deployment/provider/filebased/FileBasedProviderTest.java
(original)
+++
ace/trunk/org.apache.ace.deployment.itest/test/org/apache/ace/it/deployment/provider/filebased/FileBasedProviderTest.java
Tue Jul 25 11:58:04 2017
@@ -18,13 +18,16 @@
*/
package org.apache.ace.it.deployment.provider.filebased;
+import static org.testng.Assert.*;
import java.io.File;
import java.util.Collection;
+import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.impl.ArtifactDataImpl;
import org.apache.ace.deployment.util.test.BundleStreamGenerator;
import org.apache.ace.test.utils.FileUtils;
@@ -61,7 +64,6 @@ public class FileBasedProviderTest {
private ArtifactData BUNDLE3_2;
private ArtifactData BUNDLE4_2;
- @SuppressWarnings("serial")
@BeforeTest(alwaysRun = true)
protected void setUp() throws Exception {
@@ -73,6 +75,13 @@ public class FileBasedProviderTest {
m_backend = new FileBasedProvider();
TestUtils.configureObject(m_backend, LogService.class);
+ TestUtils.configureObject(m_backend, ArtifactDataHelper.class, new
ArtifactDataHelper() {
+ @Override
+ public List<ArtifactData> process(List<ArtifactData> artifacts,
String targetId, String versionFrom, String versionTo) {
+ return artifacts;
+ }
+ });
+
m_backend.updated(new Hashtable<String, String>() {
{
put("BaseDirectoryName", m_tempDirectory.getAbsolutePath());
@@ -159,6 +168,26 @@ public class FileBasedProviderTest {
}
/**
+ * Tests that a {@link ArtifactDataHelper} instance can be used to mangle
the returned artifact data.
+ */
+ @Test()
+ public void testArtifactDataHelperIsUsed() {
+ TestUtils.configureObject(m_backend, ArtifactDataHelper.class, new
ArtifactDataHelper() {
+ @Override
+ public List<ArtifactData> process(List<ArtifactData> artifacts,
String targetId, String versionFrom, String versionTo) {
+ Collections.sort(artifacts, (a, b) ->
b.getSymbolicName().compareTo(a.getSymbolicName()));
+ return artifacts;
+ }
+ });
+
+ // XXX
+ List<ArtifactData> bundleData =
m_backend.getBundleData(MULTIPLEVERSIONTARGET, VERSION1);
+ assertEquals(2, bundleData.size(), "Expected two bundle to be found,
but found " + bundleData.size());
+ assertEquals(BUNDLE4, bundleData.get(0), "Expected to find bundle " +
BUNDLE4.getSymbolicName());
+ assertEquals(BUNDLE3, bundleData.get(1), "Expected to find bundle " +
BUNDLE3.getSymbolicName());
+ }
+
+ /**
* Test the getBundleData for a single version, returning a single bundle
*/
@Test()
Modified: ace/trunk/org.apache.ace.deployment/provider.api.bnd
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/provider.api.bnd?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.deployment/provider.api.bnd (original)
+++ ace/trunk/org.apache.ace.deployment/provider.api.bnd Tue Jul 25 11:58:04
2017
@@ -1,6 +1,6 @@
# Licensed to the Apache Software Foundation (ASF) under the terms of ASLv2
(http://www.apache.org/licenses/LICENSE-2.0).
Export-Package: org.apache.ace.deployment.provider
-Bundle-Version: 1.1.2
+Bundle-Version: 1.2.0
Bundle-Name: Apache ACE Deployment Provider API
Bundle-Description: Provides the Deployment Provider API packages
\ No newline at end of file
Added:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java?rev=1802921&view=auto
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java
(added)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java
Tue Jul 25 11:58:04 2017
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.apache.ace.deployment.provider;
+
+import java.util.List;
+
+import org.osgi.annotation.versioning.ConsumerType;
+
+/**
+ * Provides an additional hook for processing {@link ArtifactData}s as
returned by a {@link DeploymentProvider}.
+ * <p>
+ * {@link DeploymentProvider}s can use this service to define a particular
order in which they should be included in the
+ * deployment package.
+ * </p>
+ */
+@ConsumerType
+public interface ArtifactDataHelper {
+
+ /**
+ * @param artifacts
+ * the list of artifacts that should be processed, cannot be
<code>null</code>;
+ * @param targetId
+ * the identifier of the target these artifacts are intended
for, cannot be <code>null</code>;
+ * @param versionFrom
+ * the optional from version, can be <code>null</code>;
+ * @param versionTo
+ * the to version, cannot be <code>null</code>.
+ * @return the list of processed artifacts, in the order they should
appear in the deployment package.
+ */
+ List<ArtifactData> process(List<ArtifactData> artifacts, String targetId,
String versionFrom, String versionTo);
+
+}
Propchange:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/ArtifactDataHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/DeploymentProvider.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/DeploymentProvider.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/DeploymentProvider.java
(original)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/DeploymentProvider.java
Tue Jul 25 11:58:04 2017
@@ -24,8 +24,7 @@ import java.util.List;
import org.osgi.annotation.versioning.ProviderType;
/**
- * An interface that provides the meta information for the bundles
- * in a certain version number.
+ * An interface that provides the meta information for the bundles in a
certain version number.
*/
@ProviderType
public interface DeploymentProvider {
@@ -34,43 +33,52 @@ public interface DeploymentProvider {
* Get the collection of bundleData for a specific version. This data can
be used to generate a deployment package.
* The ArtifactData.hasChanged method will return true for all bundles in
this collection
*
- * @return a collection of bundledata. If there are no bundles in this
version, return an empty list
- * @throws IllegalArgumentException if the target or version do not exist
- * @throws OverloadedException if the provider is overloaded
- * @throws java.io.IOException If an IOException occurs.
+ * @return a list of artifacts, in the order in which they should appear
in the deployment package. In case no
+ * artifacts are present in this version, an empty list is to be
returned.
+ * @throws IllegalArgumentException
+ * if the target or version do not exist
+ * @throws OverloadedException
+ * if the provider is overloaded
+ * @throws java.io.IOException
+ * If an IOException occurs.
*/
- public List<ArtifactData> getBundleData(String targetId, String version)
throws OverloadedException, IllegalArgumentException, IOException;
+ List<ArtifactData> getBundleData(String targetId, String version) throws
OverloadedException, IllegalArgumentException, IOException;
/**
* This data can be used to generate a fix package. It gives the
differences between the versionFrom and versionTo.
*
* Changes between versions are indicated by ArtifactData.hasChanged:
* <ol>
- * <li> If a bundle was present in versionFrom and not in VersionTo, it
will not be in the collection</li>
- * <li> If a bundle existed in versionFrom and exists unchanged in
VersionTo, hasChanged will return false</li>
- * <li> If a bundle existed in versionFrom and exists changed (i.e. other
version) in versionTo, hasChanged will return true</li>
- * <li> If a bundle did not exist in versionFrom and exists in VersionTo,
hasChanged will return true</li>
+ * <li>If a bundle was present in versionFrom and not in VersionTo, it
will not be in the collection</li>
+ * <li>If a bundle existed in versionFrom and exists unchanged in
VersionTo, hasChanged will return false</li>
+ * <li>If a bundle existed in versionFrom and exists changed (i.e. other
version) in versionTo, hasChanged will
+ * return true</li>
+ * <li>If a bundle did not exist in versionFrom and exists in VersionTo,
hasChanged will return true</li>
* </ol>
*
- * @return a list of bundles.
- * @throws IllegalArgumentException if the target, the versionFrom or
versionTo do no exist
- * @throws OverloadedException if the provider is overloaded
- * @throws java.io.IOException If an IOException occurs.
+ * @return a list of artifacts, in the order in which they should appear
in the deployment package. In case no
+ * artifacts are present in this version, an empty list is to be
returned.
+ * @throws IllegalArgumentException
+ * if the target, the versionFrom or versionTo do no exist
+ * @throws OverloadedException
+ * if the provider is overloaded
+ * @throws java.io.IOException
+ * If an IOException occurs.
*/
-
- public List<ArtifactData> getBundleData(String targetId, String
versionFrom, String versionTo) throws OverloadedException,
IllegalArgumentException, IOException;
+ List<ArtifactData> getBundleData(String targetId, String versionFrom,
String versionTo) throws OverloadedException, IllegalArgumentException,
IOException;
/**
- * Returns a list of versions for a specific target. The list is sorted in
- * ascending order, so the latest version is the last one in the list.
+ * Returns a list of versions for a specific target. The list is sorted in
ascending order, so the latest version is
+ * the last one in the list.
*
- * @param targetId The id of the target for which all available
deployment package
- * versions are being retrieved.
- * @return All available deployment package versions for a specific
target. If none available,
- * return an empty List.
+ * @param targetId
+ * The id of the target for which all available deployment
package versions are being retrieved.
+ * @return All available deployment package versions for a specific
target. If none available, return an empty List.
* If the target doesn't exist, an IllegalArgumentException is
thrown
- * @throws java.io.IOException If an IOException occurs.
- * @throws OverloadedException if the provider is overloaded
+ * @throws java.io.IOException
+ * If an IOException occurs.
+ * @throws OverloadedException
+ * if the provider is overloaded
*/
- public List<String> getVersions(String targetId) throws
OverloadedException, IllegalArgumentException, IOException;
-}
\ No newline at end of file
+ List<String> getVersions(String targetId) throws OverloadedException,
IllegalArgumentException, IOException;
+}
Modified:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/packageinfo
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/packageinfo?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/packageinfo
(original)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/packageinfo
Tue Jul 25 11:58:04 2017
@@ -1 +1 @@
-version 1.1.1
\ No newline at end of file
+version 1.2.0
\ No newline at end of file
Modified:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/Activator.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/Activator.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/Activator.java
(original)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/Activator.java
Tue Jul 25 11:58:04 2017
@@ -18,6 +18,7 @@
*/
package org.apache.ace.deployment.provider.repositorybased;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
@@ -33,15 +34,13 @@ public class Activator extends Dependenc
.setInterface(DeploymentProvider.class.getName(), null)
.setImplementation(RepositoryBasedProvider.class)
.add(createConfigurationDependency()
- .setPid(PID)
- )
- .add(createServiceDependency()
- .setService(LogService.class)
- .setRequired(false)));
+ .setPid(PID))
+ .add(createServiceDependency()
+ .setService(ArtifactDataHelper.class)
+ .setDefaultImplementation(NoOpArtifactDataHelper.class)
+ .setRequired(false))
+ .add(createServiceDependency()
+ .setService(LogService.class)
+ .setRequired(false)));
}
-
- @Override
- public void destroy(BundleContext arg0, DependencyManager arg1) throws
Exception {
- // TODO Auto-generated method stub
- }
-}
\ No newline at end of file
+}
Added:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java?rev=1802921&view=auto
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java
(added)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java
Tue Jul 25 11:58:04 2017
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.apache.ace.deployment.provider.repositorybased;
+
+import java.util.List;
+
+import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
+
+public class NoOpArtifactDataHelper implements ArtifactDataHelper {
+
+ @Override
+ public List<ArtifactData> process(List<ArtifactData> artifacts, String
targetId, String versionFrom, String versionTo) {
+ return artifacts;
+ }
+
+}
\ No newline at end of file
Propchange:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/NoOpArtifactDataHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProvider.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProvider.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProvider.java
(original)
+++
ace/trunk/org.apache.ace.deployment/src/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProvider.java
Tue Jul 25 11:58:04 2017
@@ -39,6 +39,7 @@ import javax.xml.parsers.SAXParserFactor
import org.apache.ace.connectionfactory.ConnectionFactory;
import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.ace.deployment.provider.OverloadedException;
import org.apache.ace.deployment.provider.impl.ArtifactDataImpl;
@@ -65,7 +66,7 @@ public class RepositoryBasedProvider imp
private static final String URL = "url";
private static final String NAME = "name";
private static final String CUSTOMER = "customer";
-
+
/**
* Key, intended to be used for artifacts which are bundles and will
publish
* a resource processor (see OSGi compendium section 114.10).
@@ -99,12 +100,13 @@ public class RepositoryBasedProvider imp
public static final String KEY_RESOURCE_PROCESSOR_PID =
"Deployment-ProvidesResourceProcessor";
public static final String MIMETYPE = "application/vnd.osgi.bundle";
-
+
/**
* Key, intended for configurations that specifies the maximum number of
concurrent users for this repository provider.
*/
private static final String MAXIMUM_NUMBER_OF_USERS =
"MaximumNumberOfUsers";
+ private volatile ArtifactDataHelper m_artifactDataHelper;
private volatile LogService m_log;
/** This variable is volatile since it can be changed by the Updated()
method. */
@@ -116,7 +118,7 @@ public class RepositoryBasedProvider imp
*/
private volatile Repository m_directRepository;
private volatile DependencyManager m_manager;
-
+
private final SAXParserFactory m_saxParserFactory;
private final Map<String,List<String>> m_cachedVersionLists;
@@ -124,7 +126,7 @@ public class RepositoryBasedProvider imp
/** Maximum number of concurrent users. Values <= 0 are used for unlimited
users. */
private int m_maximumNumberOfUsers = 0;
/** The default backoff time for each new user over the limit */
- private static final int BACKOFF_TIME_PER_USER = 5;
+ private static final int BACKOFF_TIME_PER_USER = 5;
public RepositoryBasedProvider() {
m_saxParserFactory = SAXParserFactory.newInstance();
@@ -158,7 +160,7 @@ public class RepositoryBasedProvider imp
List<XmlDeploymentArtifact>[] pairs = null;
try {
- // ACE-240: do NOT allow local/remote repositories to be
empty. If we're
+ // ACE-240: do NOT allow local/remote repositories to be
empty. If we're
// asking for real artifacts, it means we must have a
repository...
input = getRepositoryStream(true /* fail */);
if (versionFrom == null) {
@@ -204,7 +206,12 @@ public class RepositoryBasedProvider imp
dataVersionTo = getAllArtifactData(pairs[0]);
}
- return dataVersionTo != null ? dataVersionTo : new
ArrayList<ArtifactData>();
+ if (dataVersionTo == null) {
+ return new ArrayList<>();
+ }
+
+ // ACE-627: allow a custom ordering to be specified for the
artifacts to appear in our DP...
+ return m_artifactDataHelper.process(dataVersionTo, targetId,
versionFrom, versionTo);
}
finally {
m_usageCounter.getAndDecrement();
@@ -233,8 +240,8 @@ public class RepositoryBasedProvider imp
InputStream input = null;
try {
- // ACE-240: allow local/remote repositories to be empty; as
the target
- // might be new & unregistered, it can have no repository
yet...
+ // ACE-240: allow local/remote repositories to be empty; as
the target
+ // might be new & unregistered, it can have no repository
yet...
input = getRepositoryStream(false /* fail */);
List<Version> versionList;
if (input == null) {
@@ -296,7 +303,7 @@ public class RepositoryBasedProvider imp
// get the bundledata for each URL
for (XmlDeploymentArtifact pair : deploymentArtifacts) {
long artifactSize = pair.getSize();
-
+
Map<String, String> directives = pair.getDirective();
if (directives.get(DIRECTIVE_KEY_PROCESSORID) == null) {
// this is a bundle.
@@ -317,8 +324,8 @@ public class RepositoryBasedProvider imp
String filename = directives.get(DIRECTIVE_KEY_RESOURCE_ID);
result.add(new ArtifactDataImpl(pair.getUrl(), directives,
filename, artifactSize, true /* hasChanged */));
}
-
}
+
return result;
}
@@ -383,10 +390,10 @@ public class RepositoryBasedProvider imp
*/
private List<Version> getAvailableVersions(InputStream input, String
targetId) throws IllegalArgumentException {
DeploymentPackageVersionCollector collector = new
DeploymentPackageVersionCollector(targetId);
-
+
try {
m_saxParserFactory.newSAXParser().parse(input, collector);
-
+
return collector.getVersions();
}
catch (Exception e) {
@@ -408,7 +415,7 @@ public class RepositoryBasedProvider imp
*/
private List<XmlDeploymentArtifact>[]
getDeploymentArtifactPairs(InputStream input, String targetId, String[]
versions) throws IllegalArgumentException {
final DeploymentArtifactCollector collector = new
DeploymentArtifactCollector(targetId, versions);
-
+
try {
m_saxParserFactory.newSAXParser().parse(input, collector);
@@ -460,7 +467,7 @@ public class RepositoryBasedProvider imp
return new GZIPInputStream(result);
}
}
-
+
private boolean isCacheUpToDate() {
CachedRepository cachedRepository = m_cachedRepository;
try {
@@ -478,7 +485,7 @@ public class RepositoryBasedProvider imp
String name = getNotNull(settings, NAME, "RepositoryName not
configured.");
String customer = getNotNull(settings, CUSTOMER,
"RepositoryCustomer not configured.");
String maximumNumberOfUsers = (String)
settings.get(MAXIMUM_NUMBER_OF_USERS);
-
+
if (maximumNumberOfUsers != null) {
try {
m_maximumNumberOfUsers =
Integer.parseInt(maximumNumberOfUsers);
@@ -487,7 +494,7 @@ public class RepositoryBasedProvider imp
throw new ConfigurationException(MAXIMUM_NUMBER_OF_USERS,
maximumNumberOfUsers + " is not a valid value for the maximum number of
concurrent users.");
}
}
-
+
// create the remote repository and set it.
try {
BackupRepository backup = new
FilebasedBackupRepository(File.createTempFile("currentrepository", null),
File.createTempFile("backuprepository", null));
Modified:
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderPerformanceTest.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderPerformanceTest.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderPerformanceTest.java
(original)
+++
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderPerformanceTest.java
Tue Jul 25 11:58:04 2017
@@ -30,6 +30,7 @@ import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult;
import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.repository.Repository;
import org.apache.ace.test.utils.TestUtils;
import org.osgi.framework.Constants;
@@ -101,8 +102,9 @@ public class RepositoryBasedProviderPerf
m_backend = new RepositoryBasedProvider();
TestUtils.configureObject(m_backend, Repository.class, mock);
TestUtils.configureObject(m_backend, LogService.class);
+ TestUtils.configureObject(m_backend, ArtifactDataHelper.class, new
NoOpArtifactDataHelper());
}
-
+
/**
* Test the getBundleData for a single version, returning a single bundle,
for a huge XML.
*/
@@ -181,7 +183,7 @@ public class RepositoryBasedProviderPerf
/**
* Helper method to create the description of a deploymentpacakge with
given data.
- *
+ *
* @param doc The document to add the version to.
* @param targetText The targetId in the deploymentversion.
* @param versionText The version in the deploymentversion.
Modified:
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderTest.java
URL:
http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderTest.java?rev=1802921&r1=1802920&r2=1802921&view=diff
==============================================================================
---
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderTest.java
(original)
+++
ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/provider/repositorybased/RepositoryBasedProviderTest.java
Tue Jul 25 11:58:04 2017
@@ -39,6 +39,7 @@ import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult;
import org.apache.ace.deployment.provider.ArtifactData;
+import org.apache.ace.deployment.provider.ArtifactDataHelper;
import org.apache.ace.deployment.provider.impl.ArtifactDataImpl;
import org.apache.ace.deployment.util.test.BundleStreamGenerator;
import org.apache.ace.repository.Repository;
@@ -144,6 +145,7 @@ public class RepositoryBasedProviderTest
m_backend = new RepositoryBasedProvider();
TestUtils.configureObject(m_backend, Repository.class, mock);
TestUtils.configureObject(m_backend, LogService.class);
+ TestUtils.configureObject(m_backend, ArtifactDataHelper.class, new
NoOpArtifactDataHelper());
}
/**
@@ -294,7 +296,7 @@ public class RepositoryBasedProviderTest
/**
* Helper method to create the description of a deploymentpacakge with
given data.
- *
+ *
* @param doc
* The document to add the version to.
* @param targetText
@@ -354,7 +356,7 @@ public class RepositoryBasedProviderTest
/**
* Without any checked in data, we should just get back no version, but
the provider should not crash.
- *
+ *
* @throws java.io.IOException
*/
@Test()