use of org.sonatype.nexus.repository.storage.Asset in project nexus-repository-r by sonatype-nexus-community.
the class RHostedIT method testPackageUpload.
@Test
public void testPackageUpload() throws Exception {
// Verify DB contains data about uploaded component and asset
Component component = findComponent(repository, AGRICOLAE_121_TARGZ.packageName);
assertThat(component.name(), is(equalTo(AGRICOLAE_121_TARGZ.packageName)));
assertThat(component.version(), is(equalTo(AGRICOLAE_121_TARGZ.packageVersion)));
assertThat(component.group(), is(equalTo(AGRICOLAE_121_TARGZ.basePath)));
// Verify Asset is created.
Asset asset = findAsset(repository, AGRICOLAE_121_TARGZ.fullPath);
assertThat(asset.name(), is(equalTo(AGRICOLAE_121_TARGZ.fullPath)));
assertThat(asset.format(), is(equalTo(R_FORMAT_NAME)));
}
use of org.sonatype.nexus.repository.storage.Asset in project nexus-repository-r by sonatype-nexus-community.
the class RProxyIT method testDeletingComponentDeletesAllAssociatedAssets.
@Test
public void testDeletingComponentDeletesAllAssociatedAssets() throws IOException {
client.fetch(AGRICOLAE_131_TGZ.fullPath);
final Asset asset = findAsset(repository, AGRICOLAE_131_TGZ.fullPath);
assertNotNull(asset);
assertNotNull(asset.componentId());
final Component component = findComponentById(repository, asset.componentId());
assertNotNull(component);
ComponentMaintenance maintenanceFacet = repository.facet(ComponentMaintenance.class);
maintenanceFacet.deleteComponent(component.getEntityMetadata().getId(), true);
assertNull(findAsset(repository, AGRICOLAE_131_TGZ.fullPath));
assertNull(findComponentById(repository, asset.componentId()));
}
use of org.sonatype.nexus.repository.storage.Asset in project nexus-repository-r by sonatype-nexus-community.
the class RComponentMaintenance method deleteAssetTx.
/**
* Deletes the asset and its component if it's the only asset in it.
*/
@Override
@TransactionalDeleteBlob
protected Set<String> deleteAssetTx(final EntityId assetId, final boolean deleteBlob) {
StorageTx tx = UnitOfWork.currentTx();
final Asset asset = tx.findAsset(assetId, tx.findBucket(getRepository()));
if (asset == null) {
return Collections.emptySet();
}
final EntityId componentId = asset.componentId();
if (componentId == null) {
// Assets without components should be deleted on their own
return super.deleteAssetTx(assetId, deleteBlob);
}
final Component component = tx.findComponent(componentId);
if (Iterables.size(tx.browseAssets(component)) == 1) {
// Component with only one asset should be deleted as well with its asset
return deleteComponentTx(componentId, deleteBlob).getAssets();
} else {
return super.deleteAssetTx(assetId, deleteBlob);
}
}
use of org.sonatype.nexus.repository.storage.Asset in project nexus-repository-r by sonatype-nexus-community.
the class RFacetImpl method findOrCreateAsset.
@Override
public Asset findOrCreateAsset(final StorageTx tx, final Component component, final String path, final Map<String, String> attributes) {
Bucket bucket = tx.findBucket(getRepository());
Asset asset = findAsset(tx, bucket, path);
if (asset == null) {
asset = tx.createAsset(bucket, component);
asset.name(path);
// TODO: Make this a bit more robust (could be problematic if keys are removed in later versions, or if keys clash)
for (Entry<String, String> attribute : attributes.entrySet()) {
asset.formatAttributes().set(attribute.getKey(), attribute.getValue());
}
asset.formatAttributes().set(P_ASSET_KIND, getAssetKind(path).name());
tx.saveAsset(asset);
}
return asset;
}
use of org.sonatype.nexus.repository.storage.Asset in project nexus-repository-r by sonatype-nexus-community.
the class RRestoreFacetImpl method restore.
@Override
@TransactionalTouchBlob
public void restore(final AssetBlob assetBlob, final String path) throws IOException {
StorageTx tx = UnitOfWork.currentTx();
RFacet facet = facet(RFacet.class);
Asset asset;
if (componentRequired(path)) {
Map<String, String> attributes;
try (InputStream is = assetBlob.getBlob().getInputStream()) {
attributes = extractDescriptionFromArchive(path, is);
}
Component component = facet.findOrCreateComponent(tx, path, attributes);
asset = facet.findOrCreateAsset(tx, component, path, attributes);
} else {
asset = facet.findOrCreateAsset(tx, path);
}
tx.attachBlob(asset, assetBlob);
Content.applyToAsset(asset, Content.maintainLastModified(asset, new AttributesMap()));
tx.saveAsset(asset);
}
Aggregations