You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2012/04/10 10:31:02 UTC
svn commit: r1311630 -
/ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java
Author: jawi
Date: Tue Apr 10 08:31:01 2012
New Revision: 1311630
URL: http://svn.apache.org/viewvc?rev=1311630&view=rev
Log:
ACE-219: cleaned up the verifier service itself to understand how the service works.
Added:
ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java (with props)
Added: ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java
URL: http://svn.apache.org/viewvc/ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java?rev=1311630&view=auto
==============================================================================
--- ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java (added)
+++ ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java Tue Apr 10 08:31:01 2012
@@ -0,0 +1,336 @@
+/*
+ * 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.verifier.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.cert.X509Certificate;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.ace.deployment.verifier.VerifierService;
+import org.apache.ace.deployment.verifier.VerifierService.VerifyEnvironment;
+import org.apache.ace.deployment.verifier.VerifierService.VerifyReporter;
+import org.apache.felix.framework.Logger;
+import org.apache.felix.framework.resolver.Resolver;
+import org.apache.felix.framework.resolver.ResolverImpl;
+import org.apache.felix.framework.resolver.ResolverWire;
+import org.apache.felix.framework.util.MapToDictionary;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRequirement;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.service.log.LogEntry;
+
+/**
+ * Provides a {@link VerifyEnvironment} implementation.
+ */
+public class VerifyEnvironmentImpl implements VerifierService.VerifyEnvironment {
+
+ /**
+ * Provides a dummy bundle implementation.
+ */
+ private static final class DummyBundle implements Bundle {
+ private final Map<String, String> m_manifest;
+ private final long m_id;
+
+ /**
+ * @param id
+ * @param manifest
+ */
+ private DummyBundle(long id, Map<String, String> manifest) {
+ m_id = id;
+ m_manifest = manifest;
+ }
+
+ public <A> A adapt(Class<A> type) {
+ return null;
+ }
+
+ public int compareTo(Bundle o) {
+ return (int) (o.getBundleId() - getBundleId());
+ }
+
+ public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
+ return null;
+ }
+
+ public BundleContext getBundleContext() {
+ return null;
+ }
+
+ public long getBundleId() {
+ return m_id;
+ }
+
+ public File getDataFile(String filename) {
+ return null;
+ }
+
+ public URL getEntry(String path) {
+ return null;
+ }
+
+ public Enumeration<String> getEntryPaths(String path) {
+ return null;
+ }
+
+ public Dictionary<String, String> getHeaders() {
+ return new MapToDictionary(m_manifest);
+ }
+
+ public Dictionary<String, String> getHeaders(String locale) {
+ return getHeaders();
+ }
+
+ public long getLastModified() {
+ return 0;
+ }
+
+ public String getLocation() {
+ return null;
+ }
+
+ public ServiceReference<?>[] getRegisteredServices() {
+ return null;
+ }
+
+ public URL getResource(String name) {
+ return null;
+ }
+
+ public Enumeration<URL> getResources(String name) throws IOException {
+ return null;
+ }
+
+ public ServiceReference<?>[] getServicesInUse() {
+ return null;
+ }
+
+ public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+ return null;
+ }
+
+ public int getState() {
+ return Bundle.INSTALLED;
+ }
+
+ public String getSymbolicName() {
+ return null;
+ }
+
+ public Version getVersion() {
+ return null;
+ }
+
+ public boolean hasPermission(Object permission) {
+ return false;
+ }
+
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
+ return null;
+ }
+
+ public void start() throws BundleException {
+ // Nop
+ }
+
+ public void start(int options) throws BundleException {
+ // Nop
+ }
+
+ public void stop() throws BundleException {
+ // Nop
+ }
+
+ public void stop(int options) throws BundleException {
+ // Nop
+ }
+
+ public void uninstall() throws BundleException {
+ // Nop
+ }
+
+ public void update() throws BundleException {
+ // Nop
+ }
+
+ public void update(InputStream input) throws BundleException {
+ // Nop
+ }
+ }
+
+ /**
+ * Provides a dummy {@link VerifyReporter} implementation that does nothing.
+ */
+ private static final class DummyReporter implements VerifyReporter {
+ public void reportException(Exception ex) {
+ // Nop
+ }
+
+ public void reportLog(LogEntry entry) {
+ // Nop
+ }
+
+ public void reportWire(BundleRevision importer, BundleRequirement reqirement, BundleRevision exporter,
+ BundleCapability capability) {
+ // Nop
+ }
+ }
+
+ /**
+ * Provides a logger implementation for intercepting all framework logging calls.
+ */
+ private static final class FrameworkLogger {
+ private final VerifyReporter m_reporter;
+
+ /**
+ * Creates a new {@link FrameworkLogger} instance.
+ *
+ * @param reporter the {@link VerifyReporter} to route all logging to, cannot be <code>null</code>.
+ */
+ public FrameworkLogger(VerifyReporter reporter) {
+ m_reporter = reporter;
+ }
+
+ @SuppressWarnings("unused")
+ public void log(final ServiceReference ref, final int level, final String message, final Throwable t) {
+ final long time = System.currentTimeMillis();
+
+ m_reporter.reportLog(new LogEntry() {
+ public Bundle getBundle() {
+ return null;
+ }
+
+ public Throwable getException() {
+ return t;
+ }
+
+ public int getLevel() {
+ return level;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public ServiceReference getServiceReference() {
+ return ref;
+ }
+
+ public long getTime() {
+ return time;
+ }
+ });
+ }
+ }
+
+ private final Logger m_log;
+ private final VerifyReporter m_reporter;
+ private final Map<String, String> m_config;
+ private final ConcurrentMap<Long, VerifierBundleRevision> m_bundles;
+
+ /**
+ * Creates a new {@link VerifyEnvironmentImpl} instance.
+ *
+ * @param config the configuration to use, cannot be <code>null</code>;
+ * @param reporter the {@link VerifyReporter} to use, can be <code>null</code> in which case a dummy reporter will be used.
+ */
+ public VerifyEnvironmentImpl(Map<String, String> config, VerifyReporter reporter) {
+
+ m_config = config;
+ m_reporter = (reporter == null) ? new DummyReporter() : reporter;
+ m_bundles = new ConcurrentHashMap<Long, VerifierBundleRevision>();
+
+ m_log = new Logger();
+ m_log.setLogger(new FrameworkLogger(m_reporter));
+ m_log.setLogLevel(Logger.LOG_DEBUG);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public BundleRevision addBundle(final long id, final Map<String, String> manifest) throws BundleException {
+ VerifierBundleRevision rev = new VerifierBundleRevision(m_log, new DummyBundle(id, manifest), m_config, manifest);
+
+ if (m_bundles.putIfAbsent(id, rev) != null) {
+ throw new BundleException("Bundle already exists for id: " + id);
+ }
+
+ return rev;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean verifyResolve(Set<BundleRevision> mandatory, Set<BundleRevision> optional, Set<BundleRevision> ondemandFragments) {
+
+ VerifierResolverState state = new VerifierResolverState(getFrameworkExecutionEnvironment());
+
+ for (VerifierBundleRevision rev : m_bundles.values()) {
+ state.addRevision(rev);
+ }
+
+ Resolver resolver = new ResolverImpl(m_log);
+
+ try {
+ Map<BundleRevision, List<ResolverWire>> result = resolver.resolve(
+ state,
+ (mandatory == null) ? new HashSet<BundleRevision>() : mandatory,
+ (optional == null) ? new HashSet<BundleRevision>() : optional,
+ (ondemandFragments == null) ? new HashSet<BundleRevision>() : ondemandFragments);
+
+ for (Entry<BundleRevision, List<ResolverWire>> entry : result.entrySet()) {
+ for (ResolverWire wire : entry.getValue()) {
+ m_reporter.reportWire(wire.getRequirer(), wire.getRequirement(), wire.getProvider(), wire.getCapability());
+ }
+ }
+ }
+ catch (Exception ex) {
+ m_reporter.reportException(ex);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @return the framework execution environment, can be <code>null</code>.
+ */
+ @SuppressWarnings("deprecation")
+ private String getFrameworkExecutionEnvironment() {
+ return this.m_config.get(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
+ }
+
+}
\ No newline at end of file
Propchange: ace/trunk/ace-deployment-verifier/src/main/java/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java
------------------------------------------------------------------------------
svn:eol-style = native