mirror of https://github.com/apache/archiva.git
Adding content item implementations
This commit is contained in:
parent
15187ea422
commit
f75938cf85
|
@ -19,7 +19,6 @@ package org.apache.archiva.repository.content.base;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.archiva.repository.UnsupportedConversionException;
|
|
||||||
import org.apache.archiva.repository.content.ContentItem;
|
import org.apache.archiva.repository.content.ContentItem;
|
||||||
import org.apache.archiva.repository.content.Project;
|
import org.apache.archiva.repository.content.Project;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -40,10 +39,14 @@ public abstract class ArchivaContentItem implements ContentItem
|
||||||
private Map<String, String> attributes;
|
private Map<String, String> attributes;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract <T extends Project> T adapt( Class<T> clazz ) throws UnsupportedConversionException;
|
public <T extends Project> T adapt( Class<T> clazz ) {
|
||||||
|
return (T)this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract <T extends Project> boolean supports( Class<T> clazz );
|
public <T extends Project> boolean supports( Class<T> clazz ) {
|
||||||
|
return clazz != null && clazz.isAssignableFrom( this.getClass() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,60 +19,133 @@ package org.apache.archiva.repository.content.base;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.archiva.repository.RepositoryContent;
|
import org.apache.archiva.repository.ManagedRepositoryContent;
|
||||||
import org.apache.archiva.repository.UnsupportedConversionException;
|
|
||||||
import org.apache.archiva.repository.content.Project;
|
import org.apache.archiva.repository.content.Project;
|
||||||
|
import org.apache.archiva.repository.storage.StorageAsset;
|
||||||
import java.util.Map;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Immutable class, that represents a project.
|
* Immutable class, that represents a project.
|
||||||
*/
|
*/
|
||||||
public class ArchivaProject extends ArchivaContentItem implements Project
|
public class ArchivaProject extends ArchivaContentItem implements Project
|
||||||
{
|
{
|
||||||
String namespace;
|
private String namespace;
|
||||||
String id;
|
private String id;
|
||||||
RepositoryContent repositoryContent;
|
private ManagedRepositoryContent repositoryContent;
|
||||||
Map<String, String> attributes;
|
private StorageAsset asset;
|
||||||
|
|
||||||
|
// Setting all setters to private. Builder is the way to go.
|
||||||
|
private ArchivaProject() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the builder that allows to create a new instance.
|
||||||
|
* @param id the project id, must not be <code>null</code>
|
||||||
|
* @return a builder instance
|
||||||
|
*/
|
||||||
|
public static Builder withId( String id) {
|
||||||
|
return new Builder( ).withId( id );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getNamespace( )
|
public String getNamespace( )
|
||||||
{
|
{
|
||||||
return null;
|
return this.namespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getId( )
|
public String getId( )
|
||||||
{
|
{
|
||||||
return null;
|
return this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RepositoryContent getRepository( )
|
public ManagedRepositoryContent getRepository( )
|
||||||
{
|
{
|
||||||
return null;
|
return this.repositoryContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> getAttributes( )
|
public StorageAsset getAsset( )
|
||||||
{
|
{
|
||||||
return null;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends Project> T adapt( Class<T> clazz ) throws UnsupportedConversionException
|
|
||||||
|
/*
|
||||||
|
* Builder interface chaining is used to restrict mandatory attributes
|
||||||
|
* This interface is for the optional arguments.
|
||||||
|
*/
|
||||||
|
public interface OptBuilder {
|
||||||
|
|
||||||
|
OptBuilder withAsset( StorageAsset asset );
|
||||||
|
|
||||||
|
OptBuilder withNamespace( String namespace);
|
||||||
|
|
||||||
|
OptBuilder withAttribute( String key, String value );
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Builder classes for instantiation
|
||||||
|
*/
|
||||||
|
public static final class Builder implements OptBuilder
|
||||||
{
|
{
|
||||||
if (clazz != ArchivaProject.class) {
|
final private ArchivaProject project = new ArchivaProject();
|
||||||
throw new UnsupportedConversionException( "Cannot convert to class: " + clazz );
|
|
||||||
} else {
|
private Builder( )
|
||||||
return (T) this;
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Builder withId(String id) {
|
||||||
|
if ( StringUtils.isEmpty( id ) ) {
|
||||||
|
throw new IllegalArgumentException( "Null or empty value not allowed for id" );
|
||||||
|
}
|
||||||
|
project.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public OptBuilder withRepository( ManagedRepositoryContent repository ) {
|
||||||
|
project.repositoryContent = repository;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OptBuilder withAsset( StorageAsset asset )
|
||||||
|
{
|
||||||
|
project.asset = asset;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OptBuilder withNamespace( String namespace) {
|
||||||
|
if (namespace==null) {
|
||||||
|
throw new IllegalArgumentException( "Null value not allowed for namespace" );
|
||||||
|
}
|
||||||
|
project.namespace = namespace;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OptBuilder withAttribute( String key, String value) {
|
||||||
|
project.putAttribute( key, value );
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArchivaProject build() {
|
||||||
|
if (project.namespace==null) {
|
||||||
|
project.namespace = "";
|
||||||
|
}
|
||||||
|
if (project.asset == null) {
|
||||||
|
project.asset = project.getRepository( ).getRepository( ).getAsset( "" );
|
||||||
|
}
|
||||||
|
return project;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends Project> boolean supports( Class<T> clazz )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
package org.apache.archiva.repository.content.base;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.repository.content.Project;
|
||||||
|
import org.apache.archiva.repository.content.Version;
|
||||||
|
import org.apache.archiva.repository.storage.StorageAsset;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
public class ArchivaVersion extends ArchivaContentItem implements Version
|
||||||
|
{
|
||||||
|
|
||||||
|
private String version;
|
||||||
|
private StorageAsset asset;
|
||||||
|
private Project project;
|
||||||
|
|
||||||
|
private ArchivaVersion() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProjectBuilder withVersion(String version) {
|
||||||
|
return new Builder( ).withVersion( version );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getVersion( )
|
||||||
|
{
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StorageAsset getAsset( )
|
||||||
|
{
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Project getProject( )
|
||||||
|
{
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ProjectBuilder {
|
||||||
|
Builder withProject( Project project );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Builder implements ProjectBuilder {
|
||||||
|
|
||||||
|
private ArchivaVersion version = new ArchivaVersion();
|
||||||
|
|
||||||
|
ProjectBuilder withVersion( String version )
|
||||||
|
{
|
||||||
|
if ( StringUtils.isEmpty( version ) ) {
|
||||||
|
throw new IllegalArgumentException( "Version parameter must not be empty or null." );
|
||||||
|
}
|
||||||
|
this.version.version = version;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder withProject( Project project )
|
||||||
|
{
|
||||||
|
this.version.project = project;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withAsset( StorageAsset asset )
|
||||||
|
{
|
||||||
|
this.version.asset = asset;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withAttribute(String key, String value) {
|
||||||
|
this.version.putAttribute( key, value );
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchivaVersion build() {
|
||||||
|
if (this.version.asset == null) {
|
||||||
|
this.version.project.getRepository( ).getRepository( ).getAsset( "" );
|
||||||
|
}
|
||||||
|
return this.version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue