blob: 327f978ba456e7ca3f16654b26cfdc1373d13dc0 [file] [log] [blame]
/*
* 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
*
* https://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.apache.tools.ant.property;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.PropertyHelper;
import java.util.Set;
/**
* Thread local class containing local properties.
* @since Ant 1.8.0
*/
public class LocalProperties
extends InheritableThreadLocal<LocalPropertyStack>
implements PropertyHelper.PropertyEvaluator,
PropertyHelper.PropertySetter, PropertyHelper.PropertyEnumerator {
/**
* Get a localproperties for the given project.
* @param project the project to retrieve the localproperties for.
* @return the localproperties.
*/
public static synchronized LocalProperties get(Project project) {
LocalProperties l =
project.getReference(MagicNames.REFID_LOCAL_PROPERTIES);
if (l == null) {
l = new LocalProperties();
project.addReference(MagicNames.REFID_LOCAL_PROPERTIES, l);
PropertyHelper.getPropertyHelper(project).add(l);
}
return l;
}
// --------------------------------------------------
//
// Thread stuff
//
// --------------------------------------------------
/**
* Construct a new LocalProperties object.
*/
private LocalProperties() {
}
/**
* Get the initial value.
* @return a new localproperties stack.
*/
@Override
protected synchronized LocalPropertyStack initialValue() {
return new LocalPropertyStack();
}
// --------------------------------------------------
//
// Local property adding and scoping
//
// --------------------------------------------------
/**
* Add a local property to the current scope.
* @param property the property name to add.
*/
public void addLocal(String property) {
get().addLocal(property);
}
/** enter the scope */
public void enterScope() {
get().enterScope();
}
/** exit the scope */
public void exitScope() {
get().exitScope();
}
// --------------------------------------------------
//
// Copy - used in parallel to make a new stack
//
// --------------------------------------------------
/**
* Copy the stack for a parallel thread.
* To be called from the parallel thread itself.
*/
public void copy() {
set(get().copy());
}
// --------------------------------------------------
//
// PropertyHelper delegate methods
//
// --------------------------------------------------
/**
* Evaluate a property.
* @param property the property's String "identifier".
* @param helper the invoking PropertyHelper.
* @return Object value.
*/
@Override
public Object evaluate(String property, PropertyHelper helper) {
return get().evaluate(property, helper);
}
/**
* Set a *new" property.
* @param property the property's String "identifier".
* @param value the value to set.
* @param propertyHelper the invoking PropertyHelper.
* @return true if this entity 'owns' the property.
*/
@Override
public boolean setNew(
String property, Object value, PropertyHelper propertyHelper) {
return get().setNew(property, value, propertyHelper);
}
/**
* Set a property.
* @param property the property's String "identifier".
* @param value the value to set.
* @param propertyHelper the invoking PropertyHelper.
* @return true if this entity 'owns' the property.
*/
@Override
public boolean set(
String property, Object value, PropertyHelper propertyHelper) {
return get().set(property, value, propertyHelper);
}
@Override
public Set<String> getPropertyNames() {
return get().getPropertyNames();
}
}