aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java263
1 files changed, 263 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java b/org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java
new file mode 100644
index 0000000000..08bc1da61e
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/attributes/Attributes.java
@@ -0,0 +1,263 @@
+/*
+ * Copyright (C) 2015, Ivan Motsch <ivan.motsch@bsiag.com>,
+ * Copyright (C) 2017, Obeo (mathieu.cartaud@obeo.fr)
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.eclipse.jgit.attributes;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.jgit.attributes.Attribute.State;
+import org.eclipse.jgit.lib.Constants;
+
+/**
+ * Represents a set of attributes for a path
+ *
+ * @since 4.2
+ */
+public final class Attributes {
+ private final Map<String, Attribute> map = new LinkedHashMap<>();
+
+ /**
+ * Creates a new instance
+ *
+ * @param attributes
+ * a {@link org.eclipse.jgit.attributes.Attribute}
+ */
+ public Attributes(Attribute... attributes) {
+ if (attributes != null) {
+ for (Attribute a : attributes) {
+ put(a);
+ }
+ }
+ }
+
+ /**
+ * Whether the set of attributes is empty
+ *
+ * @return true if the set does not contain any attributes
+ */
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
+
+ /**
+ * Get the attribute with the given key
+ *
+ * @param key
+ * a {@link java.lang.String} object.
+ * @return the attribute or null
+ */
+ public Attribute get(String key) {
+ return map.get(key);
+ }
+
+ /**
+ * Get all attributes
+ *
+ * @return all attributes
+ */
+ public Collection<Attribute> getAll() {
+ return new ArrayList<>(map.values());
+ }
+
+ /**
+ * Put an attribute
+ *
+ * @param a
+ * an {@link org.eclipse.jgit.attributes.Attribute}
+ */
+ public void put(Attribute a) {
+ map.put(a.getKey(), a);
+ }
+
+ /**
+ * Remove attribute with given key
+ *
+ * @param key
+ * an attribute name
+ */
+ public void remove(String key) {
+ map.remove(key);
+ }
+
+ /**
+ * Whether there is an attribute with this key
+ *
+ * @param key
+ * key of an attribute
+ * @return true if the {@link org.eclipse.jgit.attributes.Attributes}
+ * contains this key
+ */
+ public boolean containsKey(String key) {
+ return map.containsKey(key);
+ }
+
+ /**
+ * Return the state.
+ *
+ * @param key
+ * key of an attribute
+ * @return the state (never returns <code>null</code>)
+ */
+ public Attribute.State getState(String key) {
+ Attribute a = map.get(key);
+ return a != null ? a.getState() : Attribute.State.UNSPECIFIED;
+ }
+
+ /**
+ * Whether the attribute is set
+ *
+ * @param key
+ * a {@link java.lang.String} object.
+ * @return true if the key is
+ * {@link org.eclipse.jgit.attributes.Attribute.State#SET}, false in
+ * all other cases
+ */
+ public boolean isSet(String key) {
+ return (getState(key) == State.SET);
+ }
+
+ /**
+ * Whether the attribute is unset
+ *
+ * @param key
+ * a {@link java.lang.String} object.
+ * @return true if the key is
+ * {@link org.eclipse.jgit.attributes.Attribute.State#UNSET}, false
+ * in all other cases
+ */
+ public boolean isUnset(String key) {
+ return (getState(key) == State.UNSET);
+ }
+
+ /**
+ * Whether the attribute with the given key is unspecified
+ *
+ * @param key
+ * a {@link java.lang.String} object.
+ * @return true if the key is
+ * {@link org.eclipse.jgit.attributes.Attribute.State#UNSPECIFIED},
+ * false in all other cases
+ */
+ public boolean isUnspecified(String key) {
+ return (getState(key) == State.UNSPECIFIED);
+ }
+
+ /**
+ * Is this a custom attribute
+ *
+ * @param key
+ * a {@link java.lang.String} object.
+ * @return true if the key is
+ * {@link org.eclipse.jgit.attributes.Attribute.State#CUSTOM}, false
+ * in all other cases see {@link #getValue(String)} for the value of
+ * the key
+ */
+ public boolean isCustom(String key) {
+ return (getState(key) == State.CUSTOM);
+ }
+
+ /**
+ * Get attribute value
+ *
+ * @param key
+ * an attribute key
+ * @return the attribute value (may be <code>null</code>)
+ */
+ public String getValue(String key) {
+ Attribute a = map.get(key);
+ return a != null ? a.getValue() : null;
+ }
+
+ /**
+ * Test if the given attributes implies to handle the related entry as a
+ * binary file (i.e. if the entry has an -merge or a merge=binary attribute)
+ * or if it can be content merged.
+ *
+ * @return <code>true</code> if the entry can be content merged,
+ * <code>false</code> otherwise
+ * @since 4.9
+ */
+ public boolean canBeContentMerged() {
+ if (isUnset(Constants.ATTR_MERGE)) {
+ return false;
+ } else if (isCustom(Constants.ATTR_MERGE)
+ && getValue(Constants.ATTR_MERGE)
+ .equals(Constants.ATTR_BUILTIN_BINARY_MERGER)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buf = new StringBuilder();
+ buf.append(getClass().getSimpleName());
+ buf.append("["); //$NON-NLS-1$
+ buf.append(" "); //$NON-NLS-1$
+ for (Attribute a : map.values()) {
+ buf.append(a.toString());
+ buf.append(" "); //$NON-NLS-1$
+ }
+ buf.append("]"); //$NON-NLS-1$
+ return buf.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return map.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof Attributes))
+ return false;
+ Attributes other = (Attributes) obj;
+ return this.map.equals(other.map);
+ }
+
+}