Author: cziegeler Date: Fri Jul 7 13:10:32 2017 New Revision: 1801155 URL: http://svn.apache.org/viewvc?rev=1801155&view=rev Log: Refactoring of package layout
Added: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java (with props) sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java (with props) sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java (with props) sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java (with props) Added: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java?rev=1801155&view=auto ============================================================================== --- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java (added) +++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java Fri Jul 7 13:10:32 2017 @@ -0,0 +1,30 @@ +/* + * 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.sling.feature.analyser; + +import org.apache.sling.feature.Application; + +/** + * Information about an application. + * This is the aggregated information. + */ +public interface ApplicationDescriptor extends ContainerDescriptor { + + Application getApplication(); + + Descriptor getFrameworkDescriptor(); +} \ No newline at end of file Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java ------------------------------------------------------------------------------ svn:keywords = author date id revision rev url Added: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java?rev=1801155&view=auto ============================================================================== --- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java (added) +++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java Fri Jul 7 13:10:32 2017 @@ -0,0 +1,30 @@ +/* + * 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.sling.feature.analyser; + +import java.util.Set; + +/** + * Information about a container (feature/application). + * This is the aggregated information. + */ +public interface ContainerDescriptor extends Descriptor { + + Set<BundleDescriptor> getBundleDescriptors(); + + Set<ArtifactDescriptor> getArtifactDescriptors(); +} \ No newline at end of file Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java ------------------------------------------------------------------------------ svn:keywords = author date id revision rev url Added: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java?rev=1801155&view=auto ============================================================================== --- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java (added) +++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java Fri Jul 7 13:10:32 2017 @@ -0,0 +1,28 @@ +/* + * 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.sling.feature.analyser; + +import org.apache.sling.feature.Feature; + +/** + * Information about a feature. + * This is the aggregated information. + */ +public interface FeatureDescriptor extends ContainerDescriptor { + + Feature getFeature(); +} \ No newline at end of file Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java ------------------------------------------------------------------------------ svn:keywords = author date id revision rev url Added: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java?rev=1801155&view=auto ============================================================================== --- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java (added) +++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java Fri Jul 7 13:10:32 2017 @@ -0,0 +1,218 @@ +/* + * 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.sling.feature.analyser.impl; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.jar.Manifest; + +import org.apache.sling.feature.Artifact; +import org.apache.sling.feature.analyser.BundleDescriptor; +import org.apache.sling.feature.analyser.PackageInfo; +import org.osgi.framework.Constants; + +/** + * Information about a bundle + */ +public class BundleDescriptorImpl + implements BundleDescriptor { + + /** The bundle symbolic name. */ + private String symbolicName; + + /** The bundle version. */ + private String bundleVersion; + + /** The start level of this artifact. */ + private final int startLevel; + + /** Information about exported packages. */ + private final Set<PackageInfo> exportedPackages = new HashSet<>(); + + /** Information about imported packages. */ + private final Set<PackageInfo> importedPackages = new HashSet<>(); + + /** Information about dynamic imported packages. */ + private final Set<PackageInfo> dynamicImportedPackages = new HashSet<>(); + + /** Manifest */ + private final Manifest manifest; + + /** The physical file for analyzing. */ + private final File artifactFile; + + /** The corresponding artifact from the feature. */ + private final Artifact artifact; + + public BundleDescriptorImpl(final Artifact a, + final File file, + final int startLevel) throws IOException { + this.artifact = a; + this.artifactFile = file; + this.startLevel = startLevel; + + this.manifest = ManifestUtil.getManifest(file); + if ( this.manifest == null ) { + throw new IOException("File has no manifest"); + } + this.analyze(); + } + + public BundleDescriptorImpl(final Artifact artifact, + final Set<PackageInfo> pcks) throws IOException { + this.artifact = artifact; + this.artifactFile = null; + this.startLevel = 0; + + this.symbolicName = Constants.SYSTEM_BUNDLE_SYMBOLICNAME; + this.bundleVersion = artifact.getId().getOSGiVersion().toString(); + this.exportedPackages.addAll(pcks); + this.manifest = null; + } + + /** + * Get the bundle symbolic name. + * @return The bundle symbolic name + */ + @Override + public String getBundleSymbolicName() { + return symbolicName; + } + + /** + * Get the bundle version + * @return The bundle version + */ + @Override + public String getBundleVersion() { + return bundleVersion; + } + + /** + * Get the start level + * @return The start level or {@code 0} for the default. + */ + @Override + public int getBundleStartLevel() { + return startLevel; + } + + @Override + public Set<PackageInfo> getExportedPackages() { + return Collections.unmodifiableSet(this.exportedPackages); + } + + @Override + public File getArtifactFile() { + return artifactFile; + } + + @Override + public Artifact getArtifact() { + return artifact; + } + + @Override + public Manifest getManifest() { + return this.manifest; + } + + @Override + public boolean isExportingPackage(final String packageName) { + if ( getExportedPackages() != null ) { + for(final PackageInfo i : getExportedPackages()) { + if ( i.getName().equals(packageName) ) { + return true; + } + } + } + return false; + } + + @Override + public boolean isExportingPackage(final PackageInfo info) { + if ( getExportedPackages() != null ) { + for(final PackageInfo i : getExportedPackages()) { + if ( i.getName().equals(info.getName()) + && (info.getVersion() == null || info.getPackageVersionRange().includes(i.getPackageVersion()))) { + return true; + } + } + } + return false; + } + + @Override + public Set<PackageInfo> getImportedPackages() { + return Collections.unmodifiableSet(this.importedPackages); + } + + @Override + public Set<PackageInfo> getDynamicImportedPackages() { + return Collections.unmodifiableSet(this.dynamicImportedPackages); + } + + protected void analyze() throws IOException { + final String name = this.manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME); + if ( name != null ) { + final String version = this.manifest.getMainAttributes().getValue(Constants.BUNDLE_VERSION); + if ( version == null ) { + throw new IOException("Unable to get bundle version from artifact " + getArtifact().getId().toMvnId()); + } + this.symbolicName = name; + this.bundleVersion = version; + final String newBundleName = this.getArtifact().getMetadata().get("bundle:rename-bsn"); + if (newBundleName != null) { + this.symbolicName = newBundleName; + } + + this.exportedPackages.addAll(ManifestUtil.extractExportedPackages(this.manifest)); + this.importedPackages.addAll(ManifestUtil.extractImportedPackages(this.manifest)); + this.dynamicImportedPackages.addAll(ManifestUtil.extractDynamicImportedPackages(this.manifest)); + + } else { + throw new IOException("Unable to get bundle symbolic name from artifact " + getArtifact().getId().toMvnId()); + } + } + + @Override + public boolean equals(Object obj) { + if ( obj instanceof BundleDescriptorImpl ) { + return this.symbolicName.equals(((BundleDescriptorImpl)obj).symbolicName) && this.bundleVersion.equals(((BundleDescriptorImpl)obj).bundleVersion); + } + return false; + } + + @Override + public int hashCode() { + return (this.symbolicName + ':' + this.bundleVersion).hashCode(); + + } + + @Override + public String toString() { + return "BundleInfo [symbolicName=" + symbolicName + ", version=" + this.bundleVersion + "]"; + } + + @Override + public int compareTo(final BundleDescriptor o) { + return (this.symbolicName + ':' + this.bundleVersion).compareTo((o.getBundleSymbolicName() + ':' + o.getBundleVersion())); + } +} \ No newline at end of file Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java ------------------------------------------------------------------------------ svn:keywords = author date id revision rev url