diff options
author | Mykola Nikishov | 2016-11-10 14:08:57 +0000 |
---|---|---|
committer | Mykola Nikishov | 2018-02-07 12:58:31 +0000 |
commit | ac6de6746fc0b4d259e8fbfaf6b8d7f76267b842 (patch) | |
tree | d39a8188ed076e10511af56e7a70099b8a5b61ae | |
parent | da5c5cf8e2d7963afd3527efefc258f651a1c964 (diff) | |
download | rt.equinox.p2-ac6de6746fc0b4d259e8fbfaf6b8d7f76267b842.tar.gz rt.equinox.p2-ac6de6746fc0b4d259e8fbfaf6b8d7f76267b842.tar.xz rt.equinox.p2-ac6de6746fc0b4d259e8fbfaf6b8d7f76267b842.zip |
Bug 423715 - Encapsulate checks performed during MD5Verifier creationI20180207-2000
As a side-effect, this decouples RawMirrorRequest and
SimpleArtifactRepository from MD5Verifier.
Change-Id: I8e5f50a3fd6b21006a42e115858d98aa07f90df5
Signed-off-by: Mykola Nikishov <mn@mn.com.ua>
3 files changed, 43 insertions, 21 deletions
diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/checksum/ChecksumUtilities.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/checksum/ChecksumUtilities.java new file mode 100644 index 000000000..38635d9f2 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/checksum/ChecksumUtilities.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2007, 2018 Mykola Nikishov. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mykola Nikishov - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.internal.p2.artifact.processors.checksum; + +import java.util.ArrayList; +import org.eclipse.equinox.internal.p2.artifact.processors.md5.MD5Verifier; +import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep; +import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; + +public class ChecksumUtilities { + /** + * When enabled, extract property from the artifact descriptor, create instance of MD5Verifier and add it to steps. + */ + public static void addChecksumVerificationStep(boolean enabled, String property, IArtifactDescriptor descriptor, ArrayList<ProcessingStep> steps) { + if (enabled && descriptor.getProperty(property) != null) { + MD5Verifier checksumVerifier = new MD5Verifier(descriptor.getProperty(property)); + if (checksumVerifier.getStatus().isOK()) + steps.add(checksumVerifier); + } + } + +} diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java index 924d6e084..0e992ba84 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java @@ -13,8 +13,9 @@ package org.eclipse.equinox.internal.p2.artifact.repository; import java.io.OutputStream; +import java.util.ArrayList; import org.eclipse.core.runtime.*; -import org.eclipse.equinox.internal.p2.artifact.processors.md5.MD5Verifier; +import org.eclipse.equinox.internal.p2.artifact.processors.checksum.ChecksumUtilities; import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository; import org.eclipse.equinox.internal.p2.repository.Transport; import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep; @@ -80,12 +81,14 @@ public class RawMirrorRequest extends MirrorRequest { // Perform the mirror operation without any processing steps @Override protected IStatus getArtifact(IArtifactDescriptor artifactDescriptor, OutputStream destination, IProgressMonitor monitor) { - if (SimpleArtifactRepository.DOWNLOAD_MD5_CHECKSUM_ENABLED && artifactDescriptor.getProperty(IArtifactDescriptor.DOWNLOAD_MD5) != null) { - MD5Verifier checksumVerifier = new MD5Verifier(artifactDescriptor.getProperty(IArtifactDescriptor.DOWNLOAD_MD5)); - if (checksumVerifier.getStatus().isOK()) { - ProcessingStepHandler handler = new ProcessingStepHandler(); - destination = handler.link(new ProcessingStep[] {checksumVerifier}, destination, monitor); - } + ArrayList<ProcessingStep> steps = new ArrayList<>(); + ChecksumUtilities.addChecksumVerificationStep(SimpleArtifactRepository.DOWNLOAD_MD5_CHECKSUM_ENABLED, IArtifactDescriptor.DOWNLOAD_MD5, artifactDescriptor, steps); + + if (!steps.isEmpty()) { + ProcessingStep[] stepArray = steps.toArray(new ProcessingStep[steps.size()]); + // TODO should probably be using createAndLink here + ProcessingStepHandler handler = new ProcessingStepHandler(); + destination = handler.link(stepArray, destination, monitor); } return getSourceRepository().getRawArtifact(artifactDescriptor, destination, monitor); } diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java index 6ee339c8e..4dfdbb9ed 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java @@ -24,7 +24,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.equinox.internal.p2.artifact.processors.md5.MD5Verifier; +import org.eclipse.equinox.internal.p2.artifact.processors.checksum.ChecksumUtilities; import org.eclipse.equinox.internal.p2.artifact.repository.*; import org.eclipse.equinox.internal.p2.artifact.repository.Messages; import org.eclipse.equinox.internal.p2.core.helpers.FileUtils; @@ -459,7 +459,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme private synchronized OutputStream addPostSteps(ProcessingStepHandler handler, IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) { ArrayList<ProcessingStep> steps = new ArrayList<>(); steps.add(new SignatureVerifier()); - addChecksumVerifiers(steps, ARTIFACT_MD5_CHECKSUM_ENABLED, descriptor, IArtifactDescriptor.ARTIFACT_MD5); + ChecksumUtilities.addChecksumVerificationStep(ARTIFACT_MD5_CHECKSUM_ENABLED, IArtifactDescriptor.ARTIFACT_MD5, descriptor, steps); if (steps.isEmpty()) return destination; @@ -472,7 +472,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme ArrayList<ProcessingStep> steps = new ArrayList<>(); if (IArtifactDescriptor.TYPE_ZIP.equals(descriptor.getProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE))) steps.add(new ZipVerifierStep()); - addChecksumVerifiers(steps, DOWNLOAD_MD5_CHECKSUM_ENABLED, descriptor, IArtifactDescriptor.DOWNLOAD_MD5); + ChecksumUtilities.addChecksumVerificationStep(DOWNLOAD_MD5_CHECKSUM_ENABLED, IArtifactDescriptor.DOWNLOAD_MD5, descriptor, steps); // Add steps here if needed if (steps.isEmpty()) @@ -482,17 +482,6 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme return handler.link(stepArray, destination, monitor); } - /** - * Adds checksum verifier to steps only if isChecksumEnabled and checksum is not null - */ - private void addChecksumVerifiers(ArrayList<ProcessingStep> steps, boolean isChecksumEnabled, IArtifactDescriptor descriptor, String property) { - if (isChecksumEnabled && descriptor.getProperty(property) != null) { - MD5Verifier checksumVerifier = new MD5Verifier(descriptor.getProperty(property)); - if (checksumVerifier.getStatus().isOK()) - steps.add(checksumVerifier); - } - } - private byte[] bytesFromHexString(String string) { byte[] bytes = new byte[UniversalUniqueIdentifier.BYTES_SIZE]; for (int i = 0; i < string.length(); i += 2) { |