aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java160
1 files changed, 160 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
new file mode 100644
index 00000000..3d3def62
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
@@ -0,0 +1,160 @@
+package org.apache.maven.configuration.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.io.File;
+
+import org.apache.maven.configuration.BeanConfigurationException;
+import org.apache.maven.configuration.BeanConfigurationPathTranslator;
+import org.apache.maven.configuration.BeanConfigurationRequest;
+import org.apache.maven.configuration.BeanConfigurationValuePreprocessor;
+import org.apache.maven.configuration.BeanConfigurator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
+import org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter;
+import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
+import org.codehaus.plexus.component.configurator.converters.lookup.DefaultConverterLookup;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.TypeAwareExpressionEvaluator;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * <strong>Warning:</strong> This is an internal class that is only public for technical reasons, it is not part of the
+ * public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = BeanConfigurator.class )
+public class DefaultBeanConfigurator
+ implements BeanConfigurator
+{
+
+ private final ConverterLookup converterLookup = new DefaultConverterLookup();
+
+ public void configureBean( BeanConfigurationRequest request )
+ throws BeanConfigurationException
+ {
+ if ( request == null )
+ {
+ throw new IllegalArgumentException( "bean configuration request not specified" );
+ }
+
+ if ( request.getBean() == null )
+ {
+ throw new IllegalArgumentException( "bean to be configured not specified" );
+ }
+
+ Object configuration = request.getConfiguration();
+ if ( configuration == null )
+ {
+ return;
+ }
+
+ PlexusConfiguration plexusConfig;
+ if ( configuration instanceof PlexusConfiguration )
+ {
+ plexusConfig = (PlexusConfiguration) configuration;
+ }
+ else if ( configuration instanceof Xpp3Dom )
+ {
+ plexusConfig = new XmlPlexusConfiguration( (Xpp3Dom) configuration );
+ }
+ else
+ {
+ throw new BeanConfigurationException( "unsupported bean configuration source ("
+ + configuration.getClass().getName() + ")" );
+ }
+
+ if ( request.getConfigurationElement() != null )
+ {
+ plexusConfig = plexusConfig.getChild( request.getConfigurationElement() );
+ }
+
+ ClassLoader classLoader = request.getClassLoader();
+ if ( classLoader == null )
+ {
+ classLoader = request.getBean().getClass().getClassLoader();
+ }
+
+ BeanExpressionEvaluator evaluator = new BeanExpressionEvaluator( request );
+
+ ObjectWithFieldsConverter converter = new ObjectWithFieldsConverter();
+
+ try
+ {
+ converter.processConfiguration( converterLookup, request.getBean(), classLoader, plexusConfig, evaluator );
+ }
+ catch ( ComponentConfigurationException e )
+ {
+ throw new BeanConfigurationException( e.getMessage(), e );
+ }
+ }
+
+ static class BeanExpressionEvaluator
+ implements TypeAwareExpressionEvaluator
+ {
+
+ private final BeanConfigurationValuePreprocessor preprocessor;
+
+ private final BeanConfigurationPathTranslator translator;
+
+ public BeanExpressionEvaluator( BeanConfigurationRequest request )
+ {
+ preprocessor = request.getValuePreprocessor();
+ translator = request.getPathTranslator();
+ }
+
+ public Object evaluate( String expression, Class<?> type )
+ throws ExpressionEvaluationException
+ {
+ if ( preprocessor != null )
+ {
+ try
+ {
+ return preprocessor.preprocessValue( expression, type );
+ }
+ catch ( BeanConfigurationException e )
+ {
+ throw new ExpressionEvaluationException( e.getMessage(), e );
+ }
+ }
+ return expression;
+ }
+
+ public Object evaluate( String expression )
+ throws ExpressionEvaluationException
+ {
+ return evaluate( expression, null );
+ }
+
+ public File alignToBaseDirectory( File file )
+ {
+ if ( translator != null )
+ {
+ return translator.translatePath( file );
+ }
+ return file;
+ }
+
+ }
+
+}