From 6a047d40ad997b4e48d82e624ace6811307d0647 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 12 Jul 2011 21:01:08 +0200 Subject: [PATCH] added PropertiesAware interface and the default implementation BasicPropertiesAware --- .../java/sonia/scm/BasicPropertiesAware.java | 183 ++++++++++++++++++ .../main/java/sonia/scm/PropertiesAware.java | 90 +++++++++ 2 files changed, 273 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java create mode 100644 scm-core/src/main/java/sonia/scm/PropertiesAware.java diff --git a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java new file mode 100644 index 0000000000..b43086a028 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java @@ -0,0 +1,183 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of SCM-Manager; 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 REGENTS 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. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.xml.XmlMapStringAdapter; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.HashMap; +import java.util.Map; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +/** + * Default implementation of {@link PropertiesAware} interface. + * + * @author Sebastian Sdorra + */ +@XmlAccessorType(XmlAccessType.FIELD) +public class BasicPropertiesAware implements PropertiesAware +{ + + /** + * Returns true if this object is the same as the obj argument. + * + * + * @param obj - the reference object with which to compare + * + * @return true if this object is the same as the obj argument + */ + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + + if (getClass() != obj.getClass()) + { + return false; + } + + final BasicPropertiesAware other = (BasicPropertiesAware) obj; + + if ((this.properties != other.properties) + && ((this.properties == null) + ||!this.properties.equals(other.properties))) + { + return false; + } + + return true; + } + + /** + * Returns a hash code value for this object. + * + * + * @return a hash code value for this object + */ + @Override + public int hashCode() + { + int hash = 7; + + hash = 41 * hash + ((this.properties != null) + ? this.properties.hashCode() + : 0); + + return hash; + } + + /** + * @see {@link PropertiesAware#removeProperty(String)} + * + * + * @param key + */ + @Override + public void removeProperty(String key) + { + properties.remove(key); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * @see {@link PropertiesAware#getProperties()} + * + * + * @return + */ + @Override + public Map getProperties() + { + return properties; + } + + /** + * @see {@link PropertiesAware#getProperty(String)} + * + * + * @param key + * + * @return + */ + @Override + public String getProperty(String key) + { + return properties.get(key); + } + + //~--- set methods ---------------------------------------------------------- + + /** + * @see {@link PropertiesAware#setProperties(java.util.Map)} + * + * + * @param properties + */ + @Override + public void setProperties(Map properties) + { + this.properties = properties; + } + + /** + * @see {@link PropertiesAware#setProperty(String,String) } + * + * + * @param key + * @param value + */ + @Override + public void setProperty(String key, String value) + { + properties.put(key, value); + } + + //~--- fields --------------------------------------------------------------- + + /** map to hold the properties */ + @XmlElement(name = "properties") + @XmlJavaTypeAdapter(XmlMapStringAdapter.class) + protected Map properties = new HashMap(); +} diff --git a/scm-core/src/main/java/sonia/scm/PropertiesAware.java b/scm-core/src/main/java/sonia/scm/PropertiesAware.java new file mode 100644 index 0000000000..1950ee108a --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/PropertiesAware.java @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of SCM-Manager; 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 REGENTS 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. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Map; + +/** + * Base interface of all objects which have properties. + * + * @since 1.6 + * @author Sebastian Sdorra + */ +public interface PropertiesAware +{ + + /** + * Removes a existing property. + * + * @param key - the key of the property + */ + public void removeProperty(String key); + + //~--- get methods ---------------------------------------------------------- + + /** + * Returns all properties. + * + * @return all properties + */ + public Map getProperties(); + + /** + * Returns the property value for the given key + * or null if the key does not exists. + * + * @param key - the key of the property + * @return the value of the property + */ + public String getProperty(String key); + + //~--- set methods ---------------------------------------------------------- + + /** + * Sets all properties and overwrites existing ones. + * + * @param properties to set + */ + public void setProperties(Map properties); + + /** + * Sets a single property. + * + * @param key - The key of the property + * @param value - The value of the property + */ + public void setProperty(String key, String value); +}