Skip to content

Commit

Permalink
LPS-86079 support R7 OSGi compatible updates to the target platform i…
Browse files Browse the repository at this point in the history
…ndexer
  • Loading branch information
rotty3000 committed Oct 20, 2018
1 parent a62d1fc commit 42f9676
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 128 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,6 @@
import java.util.Set;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.CRC32;

import org.osgi.framework.Bundle;
Expand Down Expand Up @@ -396,15 +394,6 @@ private String _toChecksum(URI uri) throws Exception {

String content = unsyncByteArrayOutputStream.toString(StringPool.UTF8);

Matcher matcher = _incrementPattern.matcher(content);

if (matcher.find()) {
String start = content.substring(0, matcher.start(1));
String end = content.substring(matcher.end(1));

content = start.concat(end);
}

crc32.update(content.getBytes(StandardCharsets.UTF_8));

return StringUtil.toHexString(crc32.getValue());
Expand All @@ -425,9 +414,6 @@ private String _toIntegrityKey(URI uri) {
private static final Log _log = LogFactoryUtil.getLog(
LPKGIndexValidator.class);

private static final Pattern _incrementPattern = Pattern.compile(
"<repository.*( increment=\"\\d*\")");

@Reference
private BytesURLProtocolSupport _bytesURLProtocolSupport;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@ Import-Package:\
\
!com.liferay.portal.bootstrap,\
\
!org.apache.tools.ant.*,\
\
!org.osgi.annotation.bundle,\
!org.osgi.service.component.annotations,\
!org.osgi.service.metatype.annotations,\
\
*
-conditionalpackage:\
aQute.bnd.*,\
Expand All @@ -37,7 +31,5 @@ Import-Package:\
org.osgi.service.resolver.*,\
org.osgi.util.*,\
\
org.slf4j.*,\
\
org.xmlpull.v1.*
-includeresource: @biz.aQute.bnd-*.jar!/aQute/bnd/build/model/osgi-core/*
-includeresource: @biz.aQute.bndlib-*.jar!/aQute/bnd/build/model/osgi-core/*
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
task deployTool(type: Copy)

dependencies {
compileOnly group: "com.liferay", name: "biz.aQute.bnd", version: "4.0.0.LIFERAY-PATCHED-1"
compileOnly group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: "4.1.0"
compileOnly group: "biz.aQute.bnd", name: "biz.aQute.repository", version: "4.1.0"
compileOnly group: "biz.aQute.bnd", name: "biz.aQute.resolve", version: "4.1.0"
compileOnly group: "org.osgi", name: "org.osgi.core", version: "6.0.0"
compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"
compileOnly group: "org.slf4j", name: "slf4j-api", version: "1.7.25"
compileOnly group: "org.slf4j", name: "slf4j-simple", version: "1.7.25"
compileOnly project(":apps:static:portal-target-platform-indexer:portal-target-platform-indexer-api")
}

Expand All @@ -11,10 +16,19 @@ deploy {
}

deployTool {
from jar
into new File(liferay.liferayHome, "tools/portal-tools-target-platform-indexer-client")
from (jar) {
rename {
"com.liferay.portal.target.platform.indexer.impl.jar"
}
}

from (configurations.compileOnly) {
include "slf4j-api-*.jar"
include "slf4j-simple-*.jar"

rename {
"com.liferay.portal.target.platform.indexer.impl.jar"
rename "slf4j-api-(.*).jar", "slf4j-api.jar"
rename "slf4j-simple-(.*).jar", "slf4j-simple.jar"
}

into new File(liferay.liferayHome, "tools/portal-tools-target-platform-indexer-client")
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,40 +16,31 @@

import aQute.bnd.build.model.EE;
import aQute.bnd.build.model.OSGI_CORE;
import aQute.bnd.http.HttpClient;
import aQute.bnd.http.HttpRequest;
import aQute.bnd.header.Attrs;
import aQute.bnd.header.Parameters;
import aQute.bnd.osgi.Domain;
import aQute.bnd.osgi.Processor;
import aQute.bnd.osgi.repository.XMLResourceParser;
import aQute.bnd.osgi.resource.CapReqBuilder;
import aQute.bnd.osgi.resource.ResourceBuilder;
import aQute.bnd.repository.osgi.OSGiRepository;

import aQute.lib.strings.Strings;
import aQute.bnd.osgi.resource.ResourceUtils;

import biz.aQute.resolve.ResolverValidator;

import com.liferay.portal.target.platform.indexer.IndexValidator;

import java.io.IOException;
import java.io.InputStream;

import java.lang.reflect.Field;

import java.net.URI;
import java.net.URL;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Stream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
Expand All @@ -75,6 +66,7 @@ public DefaultIndexValidator(List<URI> targetPlatformIndexURIs) {
@Override
public List<String> validate(List<URI> indexURIs) throws Exception {
Set<String> identities = new HashSet<>();
Set<Resource> resources = new HashSet<>();

for (URI uri : indexURIs) {
URL url = uri.toURL();
Expand All @@ -85,89 +77,29 @@ public List<String> validate(List<URI> indexURIs) throws Exception {

identities.add(identity);
}

resources.addAll(XMLResourceParser.getResources(uri));
}

try (ResolverValidator resolverValidator = new ResolverValidator()) {
ResourceBuilder resourceBuilder = new ResourceBuilder();

resourceBuilder.addEE(EE.JavaSE_1_8);
resourceBuilder.addManifest(OSGI_CORE.R6_0_0.getManifest());

_includeSystemBundleAlias(resourceBuilder);

_includeTargetPlatform(resourceBuilder, identities);

resolverValidator.setSystem(resourceBuilder.build());

List<String> messages = new ArrayList<>();

List<ResolverValidator.Resolution> resolutions;

Path tempDir = Files.createTempDirectory(null);

Field field = HttpRequest.class.getDeclaredField("url");

field.setAccessible(true);

try (OSGiRepository oSGiRepository = new OSGiRepository();
HttpClient httpClient = new HttpClient() {
Domain domain = OSGI_CORE.R7_0_0.getManifest();

@Override
public Object send(HttpRequest<?> request)
throws Exception {
resourceBuilder.addManifest(domain);

Path tempPath = Files.createTempFile(
tempDir, null, null);

URL url = (URL)field.get(request);

try (InputStream inputStream = url.openStream()) {
Files.copy(
inputStream, tempPath,
StandardCopyOption.REPLACE_EXISTING);
}

return tempPath.toFile();
}
_includeSystemBundleAlias(resourceBuilder, domain);

}) {

Map<String, String> map = new HashMap<>();

map.put("locations", Strings.join(indexURIs));
map.put("poll.time", "0");

oSGiRepository.setProperties(map);

Processor processor = new Processor();

processor.addBasicPlugin(httpClient);

oSGiRepository.setRegistry(processor);
_includeTargetPlatform(resourceBuilder, identities);

oSGiRepository.setReporter(resolverValidator);
resolverValidator.setSystem(resourceBuilder.build());

Set<Resource> resources = ResolverValidator.getAllResources(
oSGiRepository);
List<ResolverValidator.Resolution> resolutions =
resolverValidator.validate(resources);

resolutions = resolverValidator.validateResources(
oSGiRepository, resources);
}
finally {
Stream<Path> stream = Files.list(tempDir);

stream.forEach(
path -> {
try {
Files.delete(path);
}
catch (IOException ioe) {
throw new RuntimeException(ioe);
}
});

Files.delete(tempDir);
}
List<String> messages = new ArrayList<>();

for (ResolverValidator.Resolution resolution : resolutions) {
if (resolution.succeeded) {
Expand Down Expand Up @@ -225,28 +157,47 @@ private String _getRepositoryIdentity(String path, InputStream inputStream)
}
}

private void _includeSystemBundleAlias(ResourceBuilder resourceBuilder)
private void _includeSystemBundleAlias(
ResourceBuilder resourceBuilder, Domain domain)
throws Exception {

Parameters exportPackage = domain.getExportPackage();

Attrs attrs = exportPackage.get("org.osgi.framework");

String version = attrs.get(Constants.VERSION_ATTRIBUTE);

CapReqBuilder capability = new CapReqBuilder(
BundleNamespace.BUNDLE_NAMESPACE);

capability.addAttribute(
capability.getNamespace(), Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
capability.addAttribute(
ResourceUtils.getVersionAttributeForNamespace(
capability.getNamespace()),
version);

resourceBuilder.addCapability(capability);

capability = new CapReqBuilder(HostNamespace.HOST_NAMESPACE);

capability.addAttribute(
capability.getNamespace(), Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
capability.addAttribute(
ResourceUtils.getVersionAttributeForNamespace(
capability.getNamespace()),
version);

resourceBuilder.addCapability(capability);

capability = new CapReqBuilder(IdentityNamespace.IDENTITY_NAMESPACE);

capability.addAttribute(
capability.getNamespace(), Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
capability.addAttribute(
ResourceUtils.getVersionAttributeForNamespace(
capability.getNamespace()),
version);
capability.addAttribute(
IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE,
IdentityNamespace.TYPE_BUNDLE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public void index(OutputStream outputStream) throws Exception {
simpleIndexer.base(tempDir.toURI());
simpleIndexer.compress(false);
simpleIndexer.files(files);
simpleIndexer.increment(1);
simpleIndexer.name(_getRepositoryName(_lpkgFile));

simpleIndexer.index(outputStream);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public void index(OutputStream outputStream) throws Exception {
simpleIndexer.base(tempPath.toUri());
simpleIndexer.compress(false);
simpleIndexer.files(jarFiles);
simpleIndexer.increment(1);
simpleIndexer.name("Liferay Target Platform");

simpleIndexer.index(byteArrayOutputStream);
Expand Down
2 changes: 1 addition & 1 deletion modules/build-app.xml
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@

<fileset
dir="${liferay.home}/tools/portal-tools-target-platform-indexer-client"
includes="com.liferay.portal.target.platform.indexer.api.jar,com.liferay.portal.target.platform.indexer.impl.jar,com.liferay.portal.tools.target.platform.indexer.client.jar"
includes="com.liferay.portal.target.platform.indexer.api.jar,com.liferay.portal.target.platform.indexer.impl.jar,com.liferay.portal.tools.target.platform.indexer.client.jar,slf4j-api.jar,slf4j-simple.jar"
/>
<fileset
dir="${osgi.dir}/core"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ portal_lib_dir=/opt/liferay/tomcat/webapps/ROOT/WEB-INF/lib
#
jars=(
${liferay_home}/osgi/core/com.liferay.portal.bootstrap.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/com.liferay.portal.target.platform.indexer.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/com.liferay.portal.target.platform.indexer.api.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/com.liferay.portal.target.platform.indexer.impl.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/com.liferay.portal.tools.target.platform.indexer.client.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/slf4j-api.jar
${liferay_home}/tools/portal-tools-target-platform-indexer-client/slf4j-simple.jar
${liferay_home}/osgi/core/org.eclipse.osgi.jar
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.CRC32;

/**
Expand Down Expand Up @@ -89,15 +87,6 @@ public static String toChecksum(URI uri) throws Exception {

String content = readURL(uri.toURL());

Matcher matcher = _incrementPattern.matcher(content);

if (matcher.find()) {
String start = content.substring(0, matcher.start(1));
String end = content.substring(matcher.end(1));

content = start.concat(end);
}

crc32.update(content.getBytes(StandardCharsets.UTF_8));

return Long.toHexString(crc32.getValue());
Expand All @@ -115,7 +104,4 @@ public static String toIntegrityKey(URI uri) {
return integrityKey;
}

private static final Pattern _incrementPattern = Pattern.compile(
"<repository.*( increment=\"\\d*\")");

}

0 comments on commit 42f9676

Please sign in to comment.