/* * Copyright 2008-2017 the original author or authors. * * 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.codehaus.griffon.runtime.groovy.view; import griffon.util.BuilderCustomizer; import groovy.lang.Closure; import groovy.util.Factory; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import static java.util.Collections.unmodifiableList; import static java.util.Collections.unmodifiableMap; import static java.util.Objects.requireNonNull; /** * @author Andres Almiray * @since 2.0.0 */ @SuppressWarnings("rawtypes") public class AbstractBuilderCustomizer implements BuilderCustomizer { private final Map<String, Object> variables = new LinkedHashMap<>(); private final Map<String, Factory> factories = new LinkedHashMap<>(); private final Map<String, Closure> methods = new LinkedHashMap<>(); private final Map<String, Closure[]> props = new LinkedHashMap<>(); private final List<Closure> attributeDelegates = new ArrayList<>(); private final List<Closure> preInstantiateDelegates = new ArrayList<>(); private final List<Closure> postInstantiateDelegates = new ArrayList<>(); private final List<Closure> postNodeCompletionDelegates = new ArrayList<>(); private final List<Closure> disposalClosures = new ArrayList<>(); private Closure methodMissingDelegate; private Closure propertyMissingDelegate; @Nonnull public Map<String, Object> getVariables() { return unmodifiableMap(variables); } public void setVariables(@Nonnull Map<String, Object> variables) { requireNonNull(variables, "Argument 'variables' must not be null"); this.variables.clear(); this.variables.putAll(variables); } @Nonnull public Map<String, Factory> getFactories() { return unmodifiableMap(factories); } public void setFactories(@Nonnull Map<String, Factory> factories) { requireNonNull(factories, "Argument 'factories' must not be null"); this.factories.clear(); this.factories.putAll(factories); } @Nonnull public Map<String, Closure> getMethods() { return unmodifiableMap(methods); } public void setMethods(@Nonnull Map<String, Closure> methods) { requireNonNull(methods, "Argument 'methods' must not be null"); this.methods.clear(); this.methods.putAll(methods); } @Nonnull public Map<String, Closure[]> getProps() { return unmodifiableMap(props); } public void setProps(@Nonnull Map<String, Closure[]> props) { requireNonNull(props, "Argument 'props' must not be null"); this.props.clear(); this.props.putAll(props); } @Nonnull public List<Closure> getAttributeDelegates() { return unmodifiableList(attributeDelegates); } public void setAttributeDelegates(@Nonnull List<Closure> attributeDelegates) { requireNonNull(attributeDelegates, "Argument 'attributeDelegates' must not be null"); this.attributeDelegates.clear(); this.attributeDelegates.addAll(attributeDelegates); } @Nonnull public List<Closure> getPostInstantiateDelegates() { return unmodifiableList(postInstantiateDelegates); } public void setPostInstantiateDelegates(@Nonnull List<Closure> postInstantiateDelegates) { requireNonNull(postInstantiateDelegates, "Argument 'postInstantiateDelegates' must not be null"); this.postInstantiateDelegates.clear(); this.postInstantiateDelegates.addAll(postInstantiateDelegates); } @Nonnull public List<Closure> getPostNodeCompletionDelegates() { return unmodifiableList(postNodeCompletionDelegates); } public void setPostNodeCompletionDelegates(@Nonnull List<Closure> postNodeCompletionDelegates) { requireNonNull(postNodeCompletionDelegates, "Argument 'postNodeCompletionDelegates' must not be null"); this.postNodeCompletionDelegates.clear(); this.postNodeCompletionDelegates.addAll(postNodeCompletionDelegates); } @Nonnull public List<Closure> getPreInstantiateDelegates() { return unmodifiableList(preInstantiateDelegates); } public void setPreInstantiateDelegates(@Nonnull List<Closure> preInstantiateDelegates) { requireNonNull(preInstantiateDelegates, "Argument 'preInstantiateDelegates' must not be null"); this.preInstantiateDelegates.clear(); this.preInstantiateDelegates.addAll(preInstantiateDelegates); } @Nonnull public List<Closure> getDisposalClosures() { return unmodifiableList(disposalClosures); } public void setDisposalClosures(@Nonnull List<Closure> disposalClosures) { requireNonNull(disposalClosures, "Argument 'disposalClosures' must not be null"); this.disposalClosures.clear(); this.disposalClosures.addAll(disposalClosures); } @Nullable public Closure getMethodMissingDelegate() { return methodMissingDelegate; } public void setMethodMissingDelegate(@Nullable Closure methodMissingDelegate) { this.methodMissingDelegate = methodMissingDelegate; } @Nullable public Closure getPropertyMissingDelegate() { return propertyMissingDelegate; } public void setPropertyMissingDelegate(@Nullable Closure propertyMissingDelegate) { this.propertyMissingDelegate = propertyMissingDelegate; } }