/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* 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 com.speedment.common.codegen.internal;
import com.speedment.common.codegen.Meta;
import com.speedment.common.codegen.RenderStack;
import com.speedment.common.codegen.RenderTree;
import com.speedment.common.codegen.Transform;
import com.speedment.common.codegen.TransformFactory;
import static java.util.Objects.requireNonNull;
/**
* Meta implementation.
*
* @param <A> the model type
* @param <B> the result type
*/
public final class MetaImpl<A, B> implements Meta<A, B> {
private final A model;
private final B result;
private final Transform<A, B> transform;
private final TransformFactory factory;
private final RenderStack stack;
private final RenderTree tree;
private MetaImpl(
A model,
B result,
Transform<A, B> transform,
TransformFactory factory,
RenderStack stack,
RenderTree tree) {
this.model = requireNonNull(model);
this.result = requireNonNull(result);
this.transform = requireNonNull(transform);
this.factory = requireNonNull(factory);
this.stack = requireNonNull(stack);
this.tree = requireNonNull(tree);
}
@Override
public B getResult() {
return result;
}
@Override
public Transform<A, B> getTransform() {
return transform;
}
@Override
public TransformFactory getFactory() {
return factory;
}
@Override
public A getModel() {
return model;
}
@Override
public RenderStack getRenderStack() {
return stack;
}
@Override
public RenderTree getRenderTree() {
return tree;
}
@Override
public String toString() {
return "MetaImpl{" + "model=" + model + ", result=" + result + ", transform=" + transform + ", factory=" + factory + ", stack=" + stack + ", tree=" + tree + '}';
}
public static final class Builder<A, B> implements Meta.Builder<A, B> {
private A model;
private B result;
private Transform<A, B> transform;
private TransformFactory factory;
private RenderStack stack;
private RenderTree tree;
public Builder(A model, B result) {
this.model = requireNonNull(model);
this.result = requireNonNull(result);
}
@Override
public Meta.Builder<A, B> withResult(B result) {
this.result = requireNonNull(result);
return this;
}
@Override
public Meta.Builder<A, B> withTransform(Transform<A, B> transform) {
this.transform = requireNonNull(transform);
return this;
}
@Override
public Meta.Builder<A, B> withFactory(TransformFactory factory) {
this.factory = requireNonNull(factory);
return this;
}
@Override
public Meta.Builder<A, B> withModel(A model) {
this.model = requireNonNull(model);
return this;
}
@Override
public Meta.Builder<A, B> withRenderStack(RenderStack stack) {
this.stack = requireNonNull(stack);
return this;
}
@Override
public Meta.Builder<A, B> withRenderTree(RenderTree tree) {
this.tree = requireNonNull(tree);
return this;
}
@Override
public Meta<A, B> build() {
return new MetaImpl<>(
model,
result,
transform,
factory,
stack,
tree
);
}
}
}