001    /*
002     * Copyright 2011 Christian Kumpe http://kumpe.de/christian/java
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package de.kumpe.hadooptimizer.impl;
017    
018    import org.apache.commons.logging.Log;
019    import org.apache.commons.logging.LogFactory;
020    import org.apache.commons.math.random.RandomGenerator;
021    
022    import de.kumpe.hadooptimizer.NeedsRandomGenerator;
023    import de.kumpe.hadooptimizer.Wrapper;
024    
025    public abstract class NeedsRandomWrapperBase<T> implements Wrapper<T>,
026                    NeedsRandomGenerator {
027            private static final long serialVersionUID = 1L;
028            private static final Log log = LogFactory
029                            .getLog(NeedsRandomWrapperBase.class);
030    
031            protected final T delegate;
032    
033            public NeedsRandomWrapperBase(final T delegate) {
034                    if (null == delegate) {
035                            throw new NullPointerException("delegate may not be null");
036                    }
037    
038                    this.delegate = delegate;
039            }
040    
041            @Override
042            public final T getDelegate() {
043                    assert null != delegate;
044    
045                    return delegate;
046            }
047    
048            @Override
049            public void setRandomGenerator(final RandomGenerator randomGenerator) {
050                    if (log.isTraceEnabled()) {
051                            log.trace("Received new RandomGenerator-instance: " + randomGenerator);
052                    }
053    
054                    if (delegate instanceof NeedsRandomGenerator) {
055                            ((NeedsRandomGenerator) delegate).setRandomGenerator(randomGenerator);
056                    }
057            }
058    
059            @Override
060            public int hashCode() {
061                    assert null != delegate;
062    
063                    final int prime = 31;
064                    int result = 1;
065                    result = prime * result + delegate.hashCode();
066                    return result;
067            }
068    
069            @Override
070            public boolean equals(final Object obj) {
071                    assert null != delegate;
072    
073                    if (this == obj) {
074                            return true;
075                    }
076                    if (obj == null) {
077                            return false;
078                    }
079                    if (!(obj instanceof NeedsRandomWrapperBase)) {
080                            return false;
081                    }
082                    final NeedsRandomWrapperBase<?> other = (NeedsRandomWrapperBase<?>) obj;
083                    return delegate.equals(other.delegate);
084            }
085    
086            @Override
087            public String toString() {
088                    return String.format("%s [delegate=%s]", getClass().getSimpleName(),
089                                    delegate);
090            }
091    }