use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class ContentsFilteringTransferDecorator method decorateExists.
public OverriddenBooleanValue decorateExists(final Transfer transfer) {
final Location loc = transfer.getLocation();
final boolean allowsSnapshots = loc.allowsSnapshots();
final boolean allowsReleases = loc.allowsReleases();
if (loc instanceof HttpLocation && (!allowsSnapshots || !allowsReleases)) {
if (transfer.isFile()) {
final String path = transfer.getPath();
// pattern for "groupId path/(artifactId)/(version)/(filename)"
// where the filename starts with artifactId-version and is followed by - or .
final Pattern pattern = Pattern.compile(".*/([^/]+)/([^/]+)/(\\1-\\2[-.][^/]+)$");
final Matcher matcher = pattern.matcher(path);
if (matcher.find()) {
String version = matcher.group(2);
final boolean isSnapshot = SnapshotUtils.isSnapshotVersion(version);
if (isSnapshot && !allowsSnapshots || !isSnapshot && !allowsReleases) {
return OverriddenBooleanValue.OVERRIDE_FALSE;
}
}
}
}
return OverriddenBooleanValue.DEFER;
}
use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class ContentsFilteringTransferDecorator method decorateListing.
/**
* Alters the listing to filter out artifacts belonging to a version that
* should not be provided via the proxy.
*/
public String[] decorateListing(final Transfer transfer, final String[] listing) throws IOException {
final Location loc = transfer.getLocation();
final boolean allowsSnapshots = loc.allowsSnapshots();
final boolean allowsReleases = loc.allowsReleases();
// process only proxied locations, i.e. HttpLocation instances
if (loc instanceof HttpLocation && (!allowsSnapshots || !allowsReleases)) {
final String[] pathElements = transfer.getPath().split("/");
// process only paths that *can* be a GAV
if (pathElements.length >= 3) {
final String artifactId = pathElements[pathElements.length - 2];
final String version = pathElements[pathElements.length - 1];
final boolean snapshotVersion = SnapshotUtils.isSnapshotVersion(version);
if (!allowsSnapshots && snapshotVersion || !allowsReleases && !snapshotVersion) {
final List<String> result = new ArrayList<String>(listing.length);
for (final String element : listing) {
// do not include artifacts in the list
if (!isArtifact(element, artifactId, version)) {
result.add(element);
}
}
return result.toArray(new String[result.size()]);
}
}
}
return listing;
}
use of org.commonjava.maven.galley.model.Location in project indy by Commonjava.
the class DefaultGalleyStorageProvider method setup.
@PostConstruct
public void setup() {
SpecialPathInfo infoSpi = SpecialPathInfo.from(new FilePatternMatcher(".+\\.info")).setDecoratable(false).setDeletable(false).setListable(false).setPublishable(false).setRetrievable(false).setStorable(false).build();
specialPathManager.registerSpecialPathInfo(infoSpi);
ChecksummingDecoratorAdvisor readAdvisor = (transfer, op, eventMetadata) -> {
ChecksummingDecoratorAdvisor.ChecksumAdvice result = NO_DECORATE;
if (checksumAdvisors != null) {
for (IndyChecksumAdvisor advisor : checksumAdvisors) {
Optional<ChecksummingDecoratorAdvisor.ChecksumAdvice> advice = advisor.getChecksumReadAdvice(transfer, op, eventMetadata);
if (advice.isPresent()) {
ChecksummingDecoratorAdvisor.ChecksumAdvice checksumAdvice = advice.get();
if (checksumAdvice.ordinal() > result.ordinal()) {
result = checksumAdvice;
if (checksumAdvice == CALCULATE_AND_WRITE) {
break;
}
}
}
}
}
logger.debug("Advising {} for {} of: {}", result, op, transfer);
return result;
};
ChecksummingDecoratorAdvisor writeAdvisor = (transfer, op, eventMetadata) -> {
ChecksummingDecoratorAdvisor.ChecksumAdvice result = NO_DECORATE;
if (TransferOperation.GENERATE == op) {
result = CALCULATE_AND_WRITE;
} else if (checksumAdvisors != null) {
for (IndyChecksumAdvisor advisor : checksumAdvisors) {
Optional<ChecksummingDecoratorAdvisor.ChecksumAdvice> advice = advisor.getChecksumWriteAdvice(transfer, op, eventMetadata);
if (advice.isPresent()) {
ChecksummingDecoratorAdvisor.ChecksumAdvice checksumAdvice = advice.get();
if (checksumAdvice.ordinal() > result.ordinal()) {
result = checksumAdvice;
if (checksumAdvice == CALCULATE_AND_WRITE) {
break;
}
}
}
}
}
logger.debug("Advising {} for {} of: {}", result, op, transfer);
return result;
};
transferDecorator = new TransferDecoratorPipeline(new ChecksummingTransferDecorator(readAdvisor, writeAdvisor, specialPathManager, contentMetadataConsumer, new Md5GeneratorFactory(), new Sha1GeneratorFactory(), new Sha256GeneratorFactory()), new ContentsFilteringTransferDecorator(), new NoCacheTransferDecorator(specialPathManager));
final File storeRoot = config.getStorageRootDirectory();
cacheProviderFactory = new PartyLineCacheProviderFactory(storeRoot);
final File nfsBasedir = config.getNFSStorageRootDirectory();
if (nfsBasedir != null) {
if (!nfsBasedir.exists()) {
nfsBasedir.mkdirs();
}
// nfs root can not be created due to some security reason(like permission), will bypass FastLocal provider and use PartyLine
if (nfsBasedir.exists()) {
final FastLocalCacheProviderFactory fastLocalFac = new FastLocalCacheProviderFactory(storeRoot, nfsBasedir, new CacheInstanceAdapter(nfsOwnerCache), fastLocalExecutors);
cacheProviderFactory = new RoutingCacheProviderFactory((resource) -> {
if (resource != null) {
final Location loc = resource.getLocation();
// looking for KeyedLocation and StoreType.hosted should be faster than regex on the URI.
return ((loc instanceof KeyedLocation) && hosted == ((KeyedLocation) loc).getKey().getType());
}
return false;
}, fastLocalFac, cacheProviderFactory);
} else {
logger.warn("[Indy] nfs base dir {} can not be created correctly due to some unknown reasons, will use partyline cache provider as default", nfsBasedir);
}
}
// TODO: Tie this into a config file!
transportManagerConfig = new TransportManagerConfig();
}
Aggregations