/*
* Copyright 2008 Toni Menzel.
* Copyright 2008 Alin Dreghiciu.
*
* Licensed 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.
*/
package org.ops4j.pax.exam.options.extra;
import static org.ops4j.lang.NullArgumentException.validateNotEmpty;
/**
* {@link RepositoryOption} implementation.
*
* @author Toni Menzel (tonit)
* @author Alin Dreghiciu (adreghiciu@gmail.com)
* @since 0.3.0, December 19, 2008
*/
public class RepositoryOptionImpl implements RepositoryOption {
/**
* Repository url (cannot be null or empty).
*/
private final String repositoryUrl;
/**
* Marks repository as allowing snapshots.
*/
private boolean allowSnapshots;
/**
* MArks repository as allowing releases.
*/
private boolean allowReleases;
/**
* Defines repository identifier to be referenced in Maven settings.
*/
private String id;
/**
* Constructor.
*
* @param repositoryUrl
* repository url (cannot be null or empty)
*
* @throws IllegalArgumentException
* - If repository url is null or empty
*/
public RepositoryOptionImpl(final String repositoryUrl) {
validateNotEmpty(repositoryUrl, "Repository URL");
this.repositoryUrl = repositoryUrl;
allowSnapshots = false;
allowReleases = true;
}
public RepositoryOptionImpl allowSnapshots() {
allowSnapshots = true;
return this;
}
public RepositoryOptionImpl disableReleases() {
allowReleases = false;
return this;
}
public RepositoryOption id(String _id) {
this.id = _id;
return this;
}
/**
* Returns the full repository url.
*
* @return the full repository as given plus eventual snapshot/release tags (cannot be null or
* empty)
*
* @throws IllegalStateException
* - if both snapshots and releases are not allowed
*/
public String getRepository() {
if (!allowReleases && !allowSnapshots) {
throw new IllegalStateException(
"Does not make sense to disallow both releases and snapshots.");
}
// start with a plus to append default repositories from settings.xml and Maven Cental
// to the list of repositories defined by options
final StringBuilder url = new StringBuilder("+");
url.append(this.repositoryUrl);
if (allowSnapshots) {
url.append("@snapshots");
}
if (!allowReleases) {
url.append("@noreleases");
}
if (id != null) {
url.append("@id=");
url.append(id);
}
return url.toString();
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("RepositoryOptionImpl");
sb.append("{url=").append(getRepository());
sb.append('}');
return sb.toString();
}
public String getValue() {
return getRepository();
}
}