/*
* Copyright 2009 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;
/**
* Abstract implementation of {@link ProvisionControl}.
*
* @author Alin Dreghiciu (adreghiciu@gmail.com)
* @since 04 27, 2009
*/
public abstract class AbstractProvisionControl<T extends AbstractProvisionControl<T>> {
/**
* If the scanned bundles should be updated. Default behaviour is depending on used Test
* Container implementation.
*/
private Boolean shouldUpdate;
/**
* If the scanned bundles should be started. Default behaviour is depending on used Test
* Container implementation.
*/
private Boolean shouldStart;
/**
* Start level of scanned bundles. Default behaviour is depending on used Test Container
* implementation.
*/
private Integer startLevel;
/**
* Constructor.
*/
public AbstractProvisionControl() {
shouldUpdate = true;
shouldStart = true;
}
public boolean shouldUpdate() {
return shouldUpdate;
}
public T update(final Boolean _shouldUpdate) {
this.shouldUpdate = _shouldUpdate;
return itself();
}
public T update() {
return update(true);
}
public T noUpdate() {
return update(false);
}
public boolean shouldStart() {
return shouldStart;
}
public T start(final Boolean _shouldStart) {
this.shouldStart = _shouldStart;
return itself();
}
public T start() {
return start(true);
}
public T noStart() {
return start(false);
}
public Integer getStartLevel() {
return startLevel;
}
public T startLevel(final Integer _startLevel) {
this.startLevel = _startLevel;
return itself();
}
/**
* Implemented by sub classes in order to return itself (this) for fluent api usage
*
* @return itself
*/
protected abstract T itself();
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((shouldStart == null) ? 0 : shouldStart.hashCode());
result = prime * result + ((shouldUpdate == null) ? 0 : shouldUpdate.hashCode());
result = prime * result + ((startLevel == null) ? 0 : startLevel.hashCode());
return result;
}
// CHECKSTYLE:OFF : generated code
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
@SuppressWarnings("unchecked")
AbstractProvisionControl<T> other = (AbstractProvisionControl<T>) obj;
if (shouldStart == null) {
if (other.shouldStart != null)
return false;
}
else if (!shouldStart.equals(other.shouldStart))
return false;
if (shouldUpdate == null) {
if (other.shouldUpdate != null)
return false;
}
else if (!shouldUpdate.equals(other.shouldUpdate))
return false;
if (startLevel == null) {
if (other.startLevel != null)
return false;
}
else if (!startLevel.equals(other.startLevel))
return false;
return true;
}
// CHECKSTYLE:ON
}