diff options
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.java | 263 |
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); + } + +} |