+ A new API method AntProjectHelper.createAuxiliaryProperties
.
+
auxiliary.
".
+ *
+ * @return an instance of {@link AuxiliaryProperties} suitable for the project lookup
+ * @since 1.21
+ */
+ public AuxiliaryProperties createAuxiliaryProperties() {
+ return new AuxiliaryPropertiesImpl(this);
+ }
+
+ /**
* Create an implementation of {@link org.netbeans.api.queries.FileBuiltQuery} that works with files
* within the project based on simple glob pattern mappings.
*
diff --git a/project.ant/src/org/netbeans/spi/project/support/ant/AuxiliaryPropertiesImpl.java b/project.ant/src/org/netbeans/spi/project/support/ant/AuxiliaryPropertiesImpl.java
new file mode 100644
--- /dev/null
+++ b/project.ant/src/org/netbeans/spi/project/support/ant/AuxiliaryPropertiesImpl.java
@@ -0,0 +1,100 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2008 Sun Microsystems, Inc.
+ */
+
+package org.netbeans.spi.project.support.ant;
+import java.util.LinkedList;
+import java.util.List;
+import org.netbeans.api.project.ProjectManager;
+import org.netbeans.spi.project.AuxiliaryProperties;
+import org.openide.util.Mutex;
+
+/**
+ *
+ * @author Jan Lahoda
+ */
+class AuxiliaryPropertiesImpl implements AuxiliaryProperties {
+
+ private final AntProjectHelper helper;
+ private final String propertyPrefix = "auxiliary.";
+
+ public AuxiliaryPropertiesImpl(AntProjectHelper helper) {
+ this.helper = helper;
+ }
+
+ public String get(String key, boolean shared) {
+ String location = shared ? AntProjectHelper.PROJECT_PROPERTIES_PATH : AntProjectHelper.PRIVATE_PROPERTIES_PATH;
+ EditableProperties props = helper.getProperties(location);
+
+ return props.get(propertyPrefix + key);
+ }
+
+ public void put(final String key, final String value, final boolean shared) {
+ ProjectManager.mutex().writeAccess(new Mutex.Action
+ Added new API method ProjectUtils.getPreferences
and new SPI interface AuxiliaryProperties
.
+
+ * The preferences are stored in the project using either {@link AuxiliaryConfiguration} + * or {@link AuxiliaryProperties}. + *
+ * + * @param project project for which preferences should be returned + * @param clazz module specification as in {@link org.openide.util.NbPreferences#forModule(java.lang.Class)} + * @param shared whether the returned settings should be shared + * @return {@link Preferences} for the given project + * @since 1.16 + */ + public static Preferences getPreferences(Project project, Class clazz, boolean shared) { + Parameters.notNull("project", project); + Parameters.notNull("clazz", clazz); + + return AuxiliaryConfigBasedPreferencesProvider.getPreferences(project, clazz, shared); + } + + /** * Do a DFS traversal checking for cycles. * @param encountered projects already encountered in the DFS (added and removed as you go) * @param curr current node to visit diff --git a/projectapi/src/org/netbeans/modules/projectapi/AuxiliaryConfigBasedPreferencesProvider.java b/projectapi/src/org/netbeans/modules/projectapi/AuxiliaryConfigBasedPreferencesProvider.java new file mode 100644 --- /dev/null +++ b/projectapi/src/org/netbeans/modules/projectapi/AuxiliaryConfigBasedPreferencesProvider.java @@ -0,0 +1,674 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * Contributor(s): + * + * The Original Software is NetBeans. The Initial Developer of the Original + * Software is Sun Microsystems, Inc. Portions Copyright 2008 Sun + * Microsystems, Inc. All Rights Reserved. + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + */ + +package org.netbeans.modules.projectapi; + +import java.io.IOException; +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.WeakHashMap; +import java.util.prefs.AbstractPreferences; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.spi.project.AuxiliaryConfiguration; +import org.netbeans.spi.project.AuxiliaryProperties; +import org.openide.filesystems.FileObject; +import org.openide.modules.ModuleInfo; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.RequestProcessor; +import org.openide.util.RequestProcessor.Task; +import org.openide.xml.XMLUtil; +import org.w3c.dom.DOMException; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * @author Jan Lahoda + */ +public class AuxiliaryConfigBasedPreferencesProvider { + + private static MapAllow to store arbitrary properties in the project, similarly as {@link AuxiliaryConfiguration}. + * Used as backing store for {@link org.netbeans.api.project.ProjectUtils#getPreferences(org.netbeans.api.project.Project, java.lang.Class, boolean)}. + *
+ * + *Note to API clients: do not use this interface directly, use + * {@link org.netbeans.api.project.ProjectUtils#getPreferences(org.netbeans.api.project.Project, java.lang.Class, boolean)} instead. + *
+ * + * @author Jan Lahoda + * @since 1.16 + */ +public interface AuxiliaryProperties { + + /** + * Get a property value. + * + * @param key name of the property + * @param shared true to look in a sharable settings area, false to look in a private + * settings area + * @return value of the selected property, or null if not set. + */ + public String get(String key, boolean shared); + + /** + * Put a property value. + * + * @param key name of the property + * @param value value of the property.null
will remove the property.
+ * @param shared true to look in a sharable settings area, false to look in a private
+ * settings area
+ */
+ public void put(String key, String value, boolean shared);
+
+ /**
+ * List all keys of all known properties.
+ *
+ * @param shared true to look in a sharable settings area, false to look in a private
+ * settings area
+ * @return known keys.
+ */
+ public Iterable