001package ball.util.ant.taskdefs; 002/*- 003 * ########################################################################## 004 * Utilities 005 * %% 006 * Copyright (C) 2008 - 2022 Allen D. Ball 007 * %% 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 * ########################################################################## 020 */ 021import ball.util.PropertiesImpl; 022import org.apache.tools.ant.BuildException; 023import org.apache.tools.ant.Task; 024 025/** 026 * Provides default {@link Task#init()} method to initialize {@link Task} 027 * attributes from project properties. 028 * 029 * @author {@link.uri mailto:ball@hcf.dev Allen D. Ball} 030 */ 031public interface ConfigurableAntTask extends AntTaskMixIn { 032 033 /** 034 * Default implementation for {@link Task} subclasses. 035 */ 036 default void init() throws BuildException { configure(); } 037 038 /** 039 * Default method to configure {@link Task} attributes. 040 */ 041 default void configure() throws BuildException { 042 try { 043 PropertiesImpl properties = new PropertiesImpl(); 044 045 properties.putAll(((Task) this).getProject().getProperties()); 046 properties.keySet().removeAll(((Task) this).getRuntimeConfigurableWrapper().getAttributeMap().keySet()); 047 properties.configure(this); 048 } catch (BuildException exception) { 049 throw exception; 050 } catch (RuntimeException exception) { 051 throw exception; 052 } catch (Exception exception) { 053 throw new BuildException(exception); 054 } 055 } 056}