/* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.concepts.transform; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** * Composite transformer which aggregates multiple implementation and selects * the one which accepts the input. * * * @author Tony Tkacik * * @param * Input class for transformation * @param
* Product of transformation
*/
public class CompositeConditionalTransformer implements
SimpleConditionalTransformer,
AggregateTransformer {
private final Comparator transformAll(Collection extends I> inputs) {
Collection ret = new ArrayList ();
for (I i : inputs) {
ret.add(transform(i));
}
return ret;
}
private static class TransformerWithPriority implements
SimpleConditionalTransformer {
final int priority;
final SimpleConditionalTransformer transformer;
public TransformerWithPriority(
SimpleConditionalTransformer transformer, int priority) {
this.priority = priority;
this.transformer = transformer;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((transformer == null) ? 0 : transformer.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TransformerWithPriority,?> other = (TransformerWithPriority,?>) obj;
if (transformer == null) {
if (other.transformer != null)
return false;
} else if (!transformer.equals(other.transformer))
return false;
return true;
}
@Override
public boolean isAcceptable(I input) {
return transformer.isAcceptable(input);
}
@Override
public P transform(I input) {
return transformer.transform(input);
}
}
}