/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.wc;
import org.tmatesoft.svn.core.SVNProperty;
import org.tmatesoft.svn.core.SVNPropertyValue;
/**
* <b>SVNPropertyData</b> is a wrapper for both versioned and unversioned
* properties. This class represents the pair: property name - property value.
* Property managing methods of the <b>SVNWCClient</b> class use
* <b>SVNPropertyData</b> to wrap properties and dispatch them to
* <b>handleProperty()</b> methods of <b>ISVNPropertyHandler</b> for processing
* or simply return that 'properties object' as a target.
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
* @see ISVNPropertyHandler
* @see SVNWCClient
*/
public class SVNPropertyData {
private SVNPropertyValue myValue;
private String myName;
/**
* Constructs an <b>SVNPropertyData</b> given a property name and its
* value.
*
* <p>
* if <code>data</code> is not <span class="javakeyword">null</span>, is a
* {@link SVNPropertyValue#isString() string} property and <code>name</code> is an
* {@link SVNProperty#isSVNProperty(String) svn-namespace} property name, then <code>options</code>,
* if not <span class="javakeyword">null</span>, is used to translate the property value replacing
* all LF end of line markers in the property value with ones returned by {@link ISVNOptions#getNativeEOL()}.
* Otherwise, if <code>options</code> is <span class="javakeyword">null</span>,
* the <span class="javastring">"line.separator"</span> system property is used to retrieve a new EOL marker.
*
* @param name a property name
* @param data a property value
* @param options provides EOL style information
*/
public SVNPropertyData(String name, SVNPropertyValue data, ISVNOptions options) {
myName = name;
myValue = data;
if (myValue != null && SVNProperty.isSVNProperty(myName) && myValue.isString()) {
String nativeEOL = options == null ? System.getProperty("line.separator") : new String(options.getNativeEOL());
if (myValue.getString().indexOf(nativeEOL) < 0) {
myValue = SVNPropertyValue.create(myValue.getString().replaceAll("\n", nativeEOL));
}
}
}
/**
* Gets the name of the property represented by this
* <b>SVNPropertyData</b> object.
*
* @return a property name
*/
public String getName() {
return myName;
}
/**
* Gets the value of the property represented by this
* <b>SVNPropertyData</b> object.
*
* @return a property value
*/
public SVNPropertyValue getValue() {
return myValue;
}
public int hashCode() {
int result = 17 + ((myName == null) ? 0 : myName.hashCode());
return 31 * result + ((myValue == null) ? 0 : myValue.hashCode());
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
SVNPropertyData other = (SVNPropertyData) obj;
if (myName == null) {
if (other.myName != null) {
return false;
}
} else if (!myName.equals(other.myName)) {
return false;
}
if (myValue == null) {
if (other.myValue != null) {
return false;
}
} else if (!myValue.equals(other.myValue)) {
return false;
}
return true;
}
}