From e9eacfceca9db74dcffc6f1a07a20a4dcf71a4c1 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 24 Jan 2018 12:25:17 +0100 Subject: [PATCH] DATACMNS-1249 - Fix line endings to LF. --- .../data/config/ParsingUtils.java | 300 +++++------ .../org/springframework/data/geo/Box.java | 252 ++++----- .../org/springframework/data/geo/Circle.java | 272 +++++----- .../org/springframework/data/geo/Point.java | 272 +++++----- .../history/AnnotationRevisionMetadata.java | 186 +++---- .../data/history/RevisionMetadata.java | 96 ++-- .../AnnotationDetectionFieldCallback.java | 178 +++---- .../springframework/data/util/Version.java | 448 ++++++++-------- .../springframework/data/domain/jaxb/atom.xsd | 478 +++++++++--------- .../data/util/VersionUnitTests.java | 332 ++++++------ src/test/resources/META-INF/beans.xml | 12 +- 11 files changed, 1413 insertions(+), 1413 deletions(-) diff --git a/src/main/java/org/springframework/data/config/ParsingUtils.java b/src/main/java/org/springframework/data/config/ParsingUtils.java index ac729de4a..5455fc915 100644 --- a/src/main/java/org/springframework/data/config/ParsingUtils.java +++ b/src/main/java/org/springframework/data/config/ParsingUtils.java @@ -1,150 +1,150 @@ -/* - * Copyright 2011-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.config; - -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.BeanDefinitionParser; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; -import org.w3c.dom.Element; - -/** - * Utility methods for {@link BeanDefinitionParser} implementations. - * - * @author Oliver Gierke - */ -public abstract class ParsingUtils { - - private ParsingUtils() { - - } - - /** - * Configures a property value for the given property name reading the attribute of the given name from the given - * {@link Element} if the attribute is configured. - * - * @param builder must not be {@literal null}. - * @param element must not be {@literal null}. - * @param attrName must not be {@literal null} or empty. - * @param propertyName must not be {@literal null} or empty. - */ - public static void setPropertyValue(BeanDefinitionBuilder builder, Element element, String attrName, - String propertyName) { - - Assert.notNull(builder, "BeanDefinitionBuilder must not be null!"); - Assert.notNull(element, "Element must not be null!"); - Assert.hasText(attrName, "Attribute name must not be null!"); - Assert.hasText(propertyName, "Property name must not be null!"); - - String attr = element.getAttribute(attrName); - - if (StringUtils.hasText(attr)) { - builder.addPropertyValue(propertyName, attr); - } - } - - /** - * Sets the property with the given attribute name on the given {@link BeanDefinitionBuilder} to the value of the - * attribute with the given name if the attribute is configured. - * - * @param builder must not be {@literal null}. - * @param element must not be {@literal null}. - * @param attribute must not be {@literal null} or empty. - */ - public static void setPropertyValue(BeanDefinitionBuilder builder, Element element, String attribute) { - setPropertyValue(builder, element, attribute, attribute); - } - - /** - * Configures a bean property reference with the value of the attribute of the given name if it is configured. - * - * @param builder must not be {@literal null}. - * @param element must not be {@literal null}. - * @param attribute must not be {@literal null} or empty. - * @param property must not be {@literal null}or empty. - */ - public static void setPropertyReference(BeanDefinitionBuilder builder, Element element, String attribute, - String property) { - - Assert.notNull(builder, "BeanDefinitionBuilder must not be null!"); - Assert.notNull(element, "Element must not be null!"); - Assert.hasText(attribute, "Attribute name must not be null!"); - Assert.hasText(property, "Property name must not be null!"); - - String value = element.getAttribute(attribute); - - if (StringUtils.hasText(value)) { - builder.addPropertyReference(property, value); - } - } - - /** - * Returns the {@link BeanDefinition} built by the given {@link BeanDefinitionBuilder} enriched with source - * information derived from the given {@link Element}. - * - * @param builder must not be {@literal null}. - * @param context must not be {@literal null}. - * @param element must not be {@literal null}. - * @return - */ - public static AbstractBeanDefinition getSourceBeanDefinition(BeanDefinitionBuilder builder, ParserContext context, - Element element) { - - Assert.notNull(element, "Element must not be null!"); - Assert.notNull(context, "ParserContext must not be null!"); - - return getSourceBeanDefinition(builder, context.extractSource(element)); - } - - /** - * Returns the {@link AbstractBeanDefinition} built by the given builder with the given extracted source applied. - * - * @param builder must not be {@literal null}. - * @param source - * @return - */ - public static AbstractBeanDefinition getSourceBeanDefinition(BeanDefinitionBuilder builder, Object source) { - - Assert.notNull(builder, "Builder must not be null!"); - - AbstractBeanDefinition definition = builder.getRawBeanDefinition(); - definition.setSource(source); - return definition; - } - - /** - * Returns a {@link BeanDefinition} for an {@link ObjectFactoryCreatingFactoryBean} pointing to the bean with the - * given name. - * - * @param targetBeanName must not be {@literal null} or empty. - * @param source - * @return - */ - public static AbstractBeanDefinition getObjectFactoryBeanDefinition(String targetBeanName, Object source) { - - Assert.hasText(targetBeanName, "Target bean name must not be null or empty!"); - - BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ObjectFactoryCreatingFactoryBean.class); - builder.addPropertyValue("targetBeanName", targetBeanName); - builder.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE); - - return getSourceBeanDefinition(builder, source); - } -} +/* + * Copyright 2011-2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.config; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.BeanDefinitionParser; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; +import org.w3c.dom.Element; + +/** + * Utility methods for {@link BeanDefinitionParser} implementations. + * + * @author Oliver Gierke + */ +public abstract class ParsingUtils { + + private ParsingUtils() { + + } + + /** + * Configures a property value for the given property name reading the attribute of the given name from the given + * {@link Element} if the attribute is configured. + * + * @param builder must not be {@literal null}. + * @param element must not be {@literal null}. + * @param attrName must not be {@literal null} or empty. + * @param propertyName must not be {@literal null} or empty. + */ + public static void setPropertyValue(BeanDefinitionBuilder builder, Element element, String attrName, + String propertyName) { + + Assert.notNull(builder, "BeanDefinitionBuilder must not be null!"); + Assert.notNull(element, "Element must not be null!"); + Assert.hasText(attrName, "Attribute name must not be null!"); + Assert.hasText(propertyName, "Property name must not be null!"); + + String attr = element.getAttribute(attrName); + + if (StringUtils.hasText(attr)) { + builder.addPropertyValue(propertyName, attr); + } + } + + /** + * Sets the property with the given attribute name on the given {@link BeanDefinitionBuilder} to the value of the + * attribute with the given name if the attribute is configured. + * + * @param builder must not be {@literal null}. + * @param element must not be {@literal null}. + * @param attribute must not be {@literal null} or empty. + */ + public static void setPropertyValue(BeanDefinitionBuilder builder, Element element, String attribute) { + setPropertyValue(builder, element, attribute, attribute); + } + + /** + * Configures a bean property reference with the value of the attribute of the given name if it is configured. + * + * @param builder must not be {@literal null}. + * @param element must not be {@literal null}. + * @param attribute must not be {@literal null} or empty. + * @param property must not be {@literal null}or empty. + */ + public static void setPropertyReference(BeanDefinitionBuilder builder, Element element, String attribute, + String property) { + + Assert.notNull(builder, "BeanDefinitionBuilder must not be null!"); + Assert.notNull(element, "Element must not be null!"); + Assert.hasText(attribute, "Attribute name must not be null!"); + Assert.hasText(property, "Property name must not be null!"); + + String value = element.getAttribute(attribute); + + if (StringUtils.hasText(value)) { + builder.addPropertyReference(property, value); + } + } + + /** + * Returns the {@link BeanDefinition} built by the given {@link BeanDefinitionBuilder} enriched with source + * information derived from the given {@link Element}. + * + * @param builder must not be {@literal null}. + * @param context must not be {@literal null}. + * @param element must not be {@literal null}. + * @return + */ + public static AbstractBeanDefinition getSourceBeanDefinition(BeanDefinitionBuilder builder, ParserContext context, + Element element) { + + Assert.notNull(element, "Element must not be null!"); + Assert.notNull(context, "ParserContext must not be null!"); + + return getSourceBeanDefinition(builder, context.extractSource(element)); + } + + /** + * Returns the {@link AbstractBeanDefinition} built by the given builder with the given extracted source applied. + * + * @param builder must not be {@literal null}. + * @param source + * @return + */ + public static AbstractBeanDefinition getSourceBeanDefinition(BeanDefinitionBuilder builder, Object source) { + + Assert.notNull(builder, "Builder must not be null!"); + + AbstractBeanDefinition definition = builder.getRawBeanDefinition(); + definition.setSource(source); + return definition; + } + + /** + * Returns a {@link BeanDefinition} for an {@link ObjectFactoryCreatingFactoryBean} pointing to the bean with the + * given name. + * + * @param targetBeanName must not be {@literal null} or empty. + * @param source + * @return + */ + public static AbstractBeanDefinition getObjectFactoryBeanDefinition(String targetBeanName, Object source) { + + Assert.hasText(targetBeanName, "Target bean name must not be null or empty!"); + + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ObjectFactoryCreatingFactoryBean.class); + builder.addPropertyValue("targetBeanName", targetBeanName); + builder.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE); + + return getSourceBeanDefinition(builder, source); + } +} diff --git a/src/main/java/org/springframework/data/geo/Box.java b/src/main/java/org/springframework/data/geo/Box.java index 21b7565a3..ab5e5d58e 100644 --- a/src/main/java/org/springframework/data/geo/Box.java +++ b/src/main/java/org/springframework/data/geo/Box.java @@ -1,126 +1,126 @@ -/* - * Copyright 2010-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.geo; - -import org.springframework.util.Assert; - -/** - * Represents a geospatial box value - * - * @author Mark Pollack - * @author Oliver Gierke - * @author Thomas Darimont - * @since 1.8 - */ -public class Box implements Shape { - - private static final long serialVersionUID = 8198095179084040711L; - - private final Point first; - private final Point second; - - /** - * Creates a new Box spanning from the given first to the second {@link Point}. - * - * @param first must not be {@literal null}. - * @param second must not be {@literal null}. - */ - public Box(Point first, Point second) { - - Assert.notNull(first, "First point must not be null!"); - Assert.notNull(second, "Second point must not be null!"); - - this.first = first; - this.second = second; - } - - /** - * Creates a new Box from the given {@code first} to the {@code second} point represented as the {@literal double[]}. - * - * @param first must not be {@literal null} and contain exactly 2 doubles. - * @param second must not be {@literal null} and contain exactly 2 doubles. - */ - public Box(double[] first, double[] second) { - - Assert.isTrue(first.length == 2, "Point array has to have 2 elements!"); - Assert.isTrue(second.length == 2, "Point array has to have 2 elements!"); - - this.first = new Point(first[0], first[1]); - this.second = new Point(second[0], second[1]); - } - - /** - * Returns the first {@link Point} making up the {@link Box}. - * - * @return - */ - public Point getFirst() { - return first; - } - - /** - * Returns the second {@link Point} making up the {@link Box}. - * - * @return - */ - public Point getSecond() { - return second; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("Box [%s, %s]", first, second); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - - int result = 31; - - result += 17 * first.hashCode(); - result += 17 * second.hashCode(); - - return result; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - - if (this == obj) { - return true; - } - - if (!(obj instanceof Box)) { - return false; - } - - Box that = (Box) obj; - - return this.first.equals(that.first) && this.second.equals(that.second); - } -} +/* + * Copyright 2010-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.geo; + +import org.springframework.util.Assert; + +/** + * Represents a geospatial box value + * + * @author Mark Pollack + * @author Oliver Gierke + * @author Thomas Darimont + * @since 1.8 + */ +public class Box implements Shape { + + private static final long serialVersionUID = 8198095179084040711L; + + private final Point first; + private final Point second; + + /** + * Creates a new Box spanning from the given first to the second {@link Point}. + * + * @param first must not be {@literal null}. + * @param second must not be {@literal null}. + */ + public Box(Point first, Point second) { + + Assert.notNull(first, "First point must not be null!"); + Assert.notNull(second, "Second point must not be null!"); + + this.first = first; + this.second = second; + } + + /** + * Creates a new Box from the given {@code first} to the {@code second} point represented as the {@literal double[]}. + * + * @param first must not be {@literal null} and contain exactly 2 doubles. + * @param second must not be {@literal null} and contain exactly 2 doubles. + */ + public Box(double[] first, double[] second) { + + Assert.isTrue(first.length == 2, "Point array has to have 2 elements!"); + Assert.isTrue(second.length == 2, "Point array has to have 2 elements!"); + + this.first = new Point(first[0], first[1]); + this.second = new Point(second[0], second[1]); + } + + /** + * Returns the first {@link Point} making up the {@link Box}. + * + * @return + */ + public Point getFirst() { + return first; + } + + /** + * Returns the second {@link Point} making up the {@link Box}. + * + * @return + */ + public Point getSecond() { + return second; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("Box [%s, %s]", first, second); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + int result = 31; + + result += 17 * first.hashCode(); + result += 17 * second.hashCode(); + + return result; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (!(obj instanceof Box)) { + return false; + } + + Box that = (Box) obj; + + return this.first.equals(that.first) && this.second.equals(that.second); + } +} diff --git a/src/main/java/org/springframework/data/geo/Circle.java b/src/main/java/org/springframework/data/geo/Circle.java index e075c1b0f..17a686808 100644 --- a/src/main/java/org/springframework/data/geo/Circle.java +++ b/src/main/java/org/springframework/data/geo/Circle.java @@ -1,136 +1,136 @@ -/* - * Copyright 2010-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.geo; - -import org.springframework.data.annotation.PersistenceConstructor; -import org.springframework.util.Assert; - -/** - * Represents a geospatial circle value - * - * @author Mark Pollack - * @author Oliver Gierke - * @author Thomas Darimont - * @since 1.8 - */ -public class Circle implements Shape { - - private static final long serialVersionUID = 5215611530535947924L; - - private final Point center; - private final Distance radius; - - /** - * Creates a new {@link Circle} from the given {@link Point} and radius. - * - * @param center must not be {@literal null}. - * @param radius must not be {@literal null} and it's value greater or equal to zero. - */ - @PersistenceConstructor - public Circle(Point center, Distance radius) { - - Assert.notNull(center, "Center point must not be null!"); - Assert.notNull(radius, "Radius must not be null!"); - Assert.isTrue(radius.getValue() >= 0, "Radius must not be negative!"); - - this.center = center; - this.radius = radius; - } - - /** - * Creates a new {@link Circle} from the given {@link Point} and radius. - * - * @param center must not be {@literal null}. - * @param radius's value must be greater or equal to zero. - */ - public Circle(Point center, double radius) { - this(center, new Distance(radius)); - } - - /** - * Creates a new {@link Circle} from the given coordinates and radius as {@link Distance} with a - * {@link Metrics#NEUTRAL}. - * - * @param centerX - * @param centerY - * @param radius must be greater or equal to zero. - */ - public Circle(double centerX, double centerY, double radius) { - this(new Point(centerX, centerY), new Distance(radius)); - } - - /** - * Returns the center of the {@link Circle}. - * - * @return will never be {@literal null}. - */ - public Point getCenter() { - return center; - } - - /** - * Returns the radius of the {@link Circle}. - * - * @return - */ - public Distance getRadius() { - return radius; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format("Circle: [center=%s, radius=%s]", center, radius); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - - if (this == obj) { - return true; - } - - if (!(obj instanceof Circle)) { - return false; - } - - Circle that = (Circle) obj; - - return this.center.equals(that.center) && this.radius.equals(that.radius); - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - - int result = 17; - - result += 31 * center.hashCode(); - result += 31 * radius.hashCode(); - - return result; - } -} +/* + * Copyright 2010-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.geo; + +import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.util.Assert; + +/** + * Represents a geospatial circle value + * + * @author Mark Pollack + * @author Oliver Gierke + * @author Thomas Darimont + * @since 1.8 + */ +public class Circle implements Shape { + + private static final long serialVersionUID = 5215611530535947924L; + + private final Point center; + private final Distance radius; + + /** + * Creates a new {@link Circle} from the given {@link Point} and radius. + * + * @param center must not be {@literal null}. + * @param radius must not be {@literal null} and it's value greater or equal to zero. + */ + @PersistenceConstructor + public Circle(Point center, Distance radius) { + + Assert.notNull(center, "Center point must not be null!"); + Assert.notNull(radius, "Radius must not be null!"); + Assert.isTrue(radius.getValue() >= 0, "Radius must not be negative!"); + + this.center = center; + this.radius = radius; + } + + /** + * Creates a new {@link Circle} from the given {@link Point} and radius. + * + * @param center must not be {@literal null}. + * @param radius's value must be greater or equal to zero. + */ + public Circle(Point center, double radius) { + this(center, new Distance(radius)); + } + + /** + * Creates a new {@link Circle} from the given coordinates and radius as {@link Distance} with a + * {@link Metrics#NEUTRAL}. + * + * @param centerX + * @param centerY + * @param radius must be greater or equal to zero. + */ + public Circle(double centerX, double centerY, double radius) { + this(new Point(centerX, centerY), new Distance(radius)); + } + + /** + * Returns the center of the {@link Circle}. + * + * @return will never be {@literal null}. + */ + public Point getCenter() { + return center; + } + + /** + * Returns the radius of the {@link Circle}. + * + * @return + */ + public Distance getRadius() { + return radius; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("Circle: [center=%s, radius=%s]", center, radius); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (!(obj instanceof Circle)) { + return false; + } + + Circle that = (Circle) obj; + + return this.center.equals(that.center) && this.radius.equals(that.radius); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + int result = 17; + + result += 31 * center.hashCode(); + result += 31 * radius.hashCode(); + + return result; + } +} diff --git a/src/main/java/org/springframework/data/geo/Point.java b/src/main/java/org/springframework/data/geo/Point.java index 74b4de125..a1fba400a 100644 --- a/src/main/java/org/springframework/data/geo/Point.java +++ b/src/main/java/org/springframework/data/geo/Point.java @@ -1,136 +1,136 @@ -/* - * Copyright 2010-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.geo; - -import java.io.Serializable; -import java.util.Locale; - -import org.springframework.data.annotation.PersistenceConstructor; -import org.springframework.util.Assert; - -/** - * Represents a geospatial point value. - * - * @author Mark Pollack - * @author Oliver Gierke - * @author Thomas Darimont - * @since 1.8 - */ -public class Point implements Serializable { - - private static final long serialVersionUID = 3583151228933783558L; - - private final double x; - private final double y; - - /** - * Creates a {@link Point} from the given {@code x}, {@code y} coordinate. - * - * @param x - * @param y - */ - @PersistenceConstructor - public Point(double x, double y) { - this.x = x; - this.y = y; - } - - /** - * Creates a {@link Point} from the given {@link Point} coordinate. - * - * @param point must not be {@literal null}. - */ - public Point(Point point) { - - Assert.notNull(point, "Source point must not be null!"); - - this.x = point.x; - this.y = point.y; - } - - /** - * Returns the x-coordinate of the {@link Point}. - * - * @return - */ - public double getX() { - return x; - } - - /** - * Returns the y-coordinate of the {@link Point}. - * - * @return - */ - public double getY() { - return y; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - - int result = 1; - - long temp = Double.doubleToLongBits(x); - result = 31 * result + (int) (temp ^ temp >>> 32); - - temp = Double.doubleToLongBits(y); - result = 31 * result + (int) (temp ^ temp >>> 32); - - return result; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - - if (this == obj) { - return true; - } - - if (!(obj instanceof Point)) { - return false; - } - - Point other = (Point) obj; - - if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) { - return false; - } - - if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) { - return false; - } - - return true; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return String.format(Locale.ENGLISH, "Point [x=%f, y=%f]", x, y); - } -} +/* + * Copyright 2010-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.geo; + +import java.io.Serializable; +import java.util.Locale; + +import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.util.Assert; + +/** + * Represents a geospatial point value. + * + * @author Mark Pollack + * @author Oliver Gierke + * @author Thomas Darimont + * @since 1.8 + */ +public class Point implements Serializable { + + private static final long serialVersionUID = 3583151228933783558L; + + private final double x; + private final double y; + + /** + * Creates a {@link Point} from the given {@code x}, {@code y} coordinate. + * + * @param x + * @param y + */ + @PersistenceConstructor + public Point(double x, double y) { + this.x = x; + this.y = y; + } + + /** + * Creates a {@link Point} from the given {@link Point} coordinate. + * + * @param point must not be {@literal null}. + */ + public Point(Point point) { + + Assert.notNull(point, "Source point must not be null!"); + + this.x = point.x; + this.y = point.y; + } + + /** + * Returns the x-coordinate of the {@link Point}. + * + * @return + */ + public double getX() { + return x; + } + + /** + * Returns the y-coordinate of the {@link Point}. + * + * @return + */ + public double getY() { + return y; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + int result = 1; + + long temp = Double.doubleToLongBits(x); + result = 31 * result + (int) (temp ^ temp >>> 32); + + temp = Double.doubleToLongBits(y); + result = 31 * result + (int) (temp ^ temp >>> 32); + + return result; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (!(obj instanceof Point)) { + return false; + } + + Point other = (Point) obj; + + if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) { + return false; + } + + if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) { + return false; + } + + return true; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format(Locale.ENGLISH, "Point [x=%f, y=%f]", x, y); + } +} diff --git a/src/main/java/org/springframework/data/history/AnnotationRevisionMetadata.java b/src/main/java/org/springframework/data/history/AnnotationRevisionMetadata.java index 2ad2b4ef9..50e1e3169 100755 --- a/src/main/java/org/springframework/data/history/AnnotationRevisionMetadata.java +++ b/src/main/java/org/springframework/data/history/AnnotationRevisionMetadata.java @@ -1,93 +1,93 @@ -/* - * Copyright 2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.history; - -import java.lang.annotation.Annotation; - -import org.joda.time.DateTime; -import org.springframework.data.util.AnnotationDetectionFieldCallback; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; - -/** - * A {@link RevisionMetadata} implementation that inspects the given object for fields with the configured annotations - * and returns the field's values on calls to {@link #getRevisionDate()} and {@link #getRevisionNumber()}. - * - * @author Oliver Gierke - */ -public class AnnotationRevisionMetadata> implements RevisionMetadata { - - private final Object entity; - private final N revisionNumber; - private final DateTime revisionDate; - - /** - * Creates a new {@link AnnotationRevisionMetadata} inspecing the given entity for the given annotations. If no - * annotations will be provided these values will not be looked up from the entity and return {@literal null}. - * - * @param entity must not be {@literal null}. - * @param revisionNumberAnnotation - * @param revisionTimeStampAnnotation - */ - public AnnotationRevisionMetadata(final Object entity, Class revisionNumberAnnotation, - Class revisionTimeStampAnnotation) { - - Assert.notNull(entity, "Entity must not be null!"); - this.entity = entity; - - if (revisionNumberAnnotation != null) { - AnnotationDetectionFieldCallback numberCallback = new AnnotationDetectionFieldCallback(revisionNumberAnnotation); - ReflectionUtils.doWithFields(entity.getClass(), numberCallback); - this.revisionNumber = numberCallback.getValue(entity); - } else { - this.revisionNumber = null; - } - - if (revisionTimeStampAnnotation != null) { - AnnotationDetectionFieldCallback revisionCallback = new AnnotationDetectionFieldCallback( - revisionTimeStampAnnotation); - ReflectionUtils.doWithFields(entity.getClass(), revisionCallback); - this.revisionDate = new DateTime(revisionCallback.getValue(entity)); - } else { - this.revisionDate = null; - } - } - - /* - * (non-Javadoc) - * @see org.springframework.data.repository.history.RevisionMetadata#getRevisionNumber() - */ - public N getRevisionNumber() { - return revisionNumber; - } - - /* - * (non-Javadoc) - * @see org.springframework.data.repository.history.RevisionMetadata#getRevisionDate() - */ - public DateTime getRevisionDate() { - return revisionDate; - } - - /* - * (non-Javadoc) - * @see org.springframework.data.repository.history.RevisionMetadata#getDelegate() - */ - @SuppressWarnings("unchecked") - public T getDelegate() { - return (T) entity; - } -} +/* + * Copyright 2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.history; + +import java.lang.annotation.Annotation; + +import org.joda.time.DateTime; +import org.springframework.data.util.AnnotationDetectionFieldCallback; +import org.springframework.util.Assert; +import org.springframework.util.ReflectionUtils; + +/** + * A {@link RevisionMetadata} implementation that inspects the given object for fields with the configured annotations + * and returns the field's values on calls to {@link #getRevisionDate()} and {@link #getRevisionNumber()}. + * + * @author Oliver Gierke + */ +public class AnnotationRevisionMetadata> implements RevisionMetadata { + + private final Object entity; + private final N revisionNumber; + private final DateTime revisionDate; + + /** + * Creates a new {@link AnnotationRevisionMetadata} inspecing the given entity for the given annotations. If no + * annotations will be provided these values will not be looked up from the entity and return {@literal null}. + * + * @param entity must not be {@literal null}. + * @param revisionNumberAnnotation + * @param revisionTimeStampAnnotation + */ + public AnnotationRevisionMetadata(final Object entity, Class revisionNumberAnnotation, + Class revisionTimeStampAnnotation) { + + Assert.notNull(entity, "Entity must not be null!"); + this.entity = entity; + + if (revisionNumberAnnotation != null) { + AnnotationDetectionFieldCallback numberCallback = new AnnotationDetectionFieldCallback(revisionNumberAnnotation); + ReflectionUtils.doWithFields(entity.getClass(), numberCallback); + this.revisionNumber = numberCallback.getValue(entity); + } else { + this.revisionNumber = null; + } + + if (revisionTimeStampAnnotation != null) { + AnnotationDetectionFieldCallback revisionCallback = new AnnotationDetectionFieldCallback( + revisionTimeStampAnnotation); + ReflectionUtils.doWithFields(entity.getClass(), revisionCallback); + this.revisionDate = new DateTime(revisionCallback.getValue(entity)); + } else { + this.revisionDate = null; + } + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.history.RevisionMetadata#getRevisionNumber() + */ + public N getRevisionNumber() { + return revisionNumber; + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.history.RevisionMetadata#getRevisionDate() + */ + public DateTime getRevisionDate() { + return revisionDate; + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.history.RevisionMetadata#getDelegate() + */ + @SuppressWarnings("unchecked") + public T getDelegate() { + return (T) entity; + } +} diff --git a/src/main/java/org/springframework/data/history/RevisionMetadata.java b/src/main/java/org/springframework/data/history/RevisionMetadata.java index 6d8cd64cf..2630fc53a 100755 --- a/src/main/java/org/springframework/data/history/RevisionMetadata.java +++ b/src/main/java/org/springframework/data/history/RevisionMetadata.java @@ -1,48 +1,48 @@ -/* - * Copyright 2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.history; - -import org.joda.time.DateTime; - -/** - * Metadata about a revision. - * - * @author Philipp Huegelmeyer - * @author Oliver Gierke - */ -public interface RevisionMetadata> { - - /** - * Returns the revision number of the revision. - * - * @return - */ - N getRevisionNumber(); - - /** - * Returns the date of the revision. - * - * @return - */ - DateTime getRevisionDate(); - - /** - * Returns the underlying revision metadata which might provider more detailed implementation specific information. - * - * @return - */ - T getDelegate(); -} +/* + * Copyright 2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.history; + +import org.joda.time.DateTime; + +/** + * Metadata about a revision. + * + * @author Philipp Huegelmeyer + * @author Oliver Gierke + */ +public interface RevisionMetadata> { + + /** + * Returns the revision number of the revision. + * + * @return + */ + N getRevisionNumber(); + + /** + * Returns the date of the revision. + * + * @return + */ + DateTime getRevisionDate(); + + /** + * Returns the underlying revision metadata which might provider more detailed implementation specific information. + * + * @return + */ + T getDelegate(); +} diff --git a/src/main/java/org/springframework/data/util/AnnotationDetectionFieldCallback.java b/src/main/java/org/springframework/data/util/AnnotationDetectionFieldCallback.java index 84ba76449..75e6af0e1 100755 --- a/src/main/java/org/springframework/data/util/AnnotationDetectionFieldCallback.java +++ b/src/main/java/org/springframework/data/util/AnnotationDetectionFieldCallback.java @@ -1,89 +1,89 @@ -/* - * Copyright 2012-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.util; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; - -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; - -/** - * A {@link FieldCallback} that will inspect each field for a given annotation. This field's type can then be accessed - * afterwards. - * - * @author Oliver Gierke - * @author Christoph Strobl - */ -public class AnnotationDetectionFieldCallback implements FieldCallback { - - private final Class annotationType; - private Field field; - - /** - * Creates a new {@link AnnotationDetectionFieldCallback} scanning for an annotation of the given type. - * - * @param annotationType must not be {@literal null}. - */ - public AnnotationDetectionFieldCallback(Class annotationType) { - - Assert.notNull(annotationType, "AnnotationType must not be null!"); - this.annotationType = annotationType; - } - - /* - * (non-Javadoc) - * @see org.springframework.util.ReflectionUtils.FieldCallback#doWith(java.lang.reflect.Field) - */ - public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException { - - if (this.field != null) { - return; - } - - Annotation annotation = AnnotatedElementUtils.findMergedAnnotation(field, annotationType); - - if (annotation != null) { - - this.field = field; - ReflectionUtils.makeAccessible(this.field); - } - } - - /** - * Returns the type of the field. - * - * @return - */ - public Class getType() { - return field == null ? null : field.getType(); - } - - /** - * Retrieves the value of the field by reflection. - * - * @param source must not be {@literal null}. - * @return - */ - @SuppressWarnings("unchecked") - public T getValue(Object source) { - - Assert.notNull(source, "Source object must not be null!"); - return field == null ? null : (T) ReflectionUtils.getField(field, source); - } -} +/* + * Copyright 2012-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.util; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.util.Assert; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; + +/** + * A {@link FieldCallback} that will inspect each field for a given annotation. This field's type can then be accessed + * afterwards. + * + * @author Oliver Gierke + * @author Christoph Strobl + */ +public class AnnotationDetectionFieldCallback implements FieldCallback { + + private final Class annotationType; + private Field field; + + /** + * Creates a new {@link AnnotationDetectionFieldCallback} scanning for an annotation of the given type. + * + * @param annotationType must not be {@literal null}. + */ + public AnnotationDetectionFieldCallback(Class annotationType) { + + Assert.notNull(annotationType, "AnnotationType must not be null!"); + this.annotationType = annotationType; + } + + /* + * (non-Javadoc) + * @see org.springframework.util.ReflectionUtils.FieldCallback#doWith(java.lang.reflect.Field) + */ + public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException { + + if (this.field != null) { + return; + } + + Annotation annotation = AnnotatedElementUtils.findMergedAnnotation(field, annotationType); + + if (annotation != null) { + + this.field = field; + ReflectionUtils.makeAccessible(this.field); + } + } + + /** + * Returns the type of the field. + * + * @return + */ + public Class getType() { + return field == null ? null : field.getType(); + } + + /** + * Retrieves the value of the field by reflection. + * + * @param source must not be {@literal null}. + * @return + */ + @SuppressWarnings("unchecked") + public T getValue(Object source) { + + Assert.notNull(source, "Source object must not be null!"); + return field == null ? null : (T) ReflectionUtils.getField(field, source); + } +} diff --git a/src/main/java/org/springframework/data/util/Version.java b/src/main/java/org/springframework/data/util/Version.java index ee2272f54..05e722cad 100644 --- a/src/main/java/org/springframework/data/util/Version.java +++ b/src/main/java/org/springframework/data/util/Version.java @@ -1,224 +1,224 @@ -/* - * Copyright 2013-2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.util; - -import java.util.ArrayList; -import java.util.List; - -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; - -/** - * Value object to represent a Version consisting of major, minor and bugfix part. - * - * @author Oliver Gierke - */ -public class Version implements Comparable { - - private static final String VERSION_PARSE_ERROR = "Invalid version string! Could not parse segment %s within %s."; - - private final int major; - private final int minor; - private final int bugfix; - private final int build; - - /** - * Creates a new {@link Version} from the given integer values. At least one value has to be given but a maximum of 4. - * - * @param parts must not be {@literal null} or empty. - */ - public Version(int... parts) { - - Assert.notNull(parts, "Parts must not be null!"); - Assert.isTrue(parts.length > 0 && parts.length < 5, String.format("Invalid parts length. 0 < %s < 5", parts.length)); - - this.major = parts[0]; - this.minor = parts.length > 1 ? parts[1] : 0; - this.bugfix = parts.length > 2 ? parts[2] : 0; - this.build = parts.length > 3 ? parts[3] : 0; - - Assert.isTrue(major >= 0, "Major version must be greater or equal zero!"); - Assert.isTrue(minor >= 0, "Minor version must be greater or equal zero!"); - Assert.isTrue(bugfix >= 0, "Bugfix version must be greater or equal zero!"); - Assert.isTrue(build >= 0, "Build version must be greater or equal zero!"); - } - - /** - * Parses the given string representation of a version into a {@link Version} object. - * - * @param version must not be {@literal null} or empty. - * @return - */ - public static Version parse(String version) { - - Assert.hasText(version, "Version must not be null o empty!"); - - String[] parts = version.trim().split("\\."); - int[] intParts = new int[parts.length]; - - for (int i = 0; i < parts.length; i++) { - - String input = i == parts.length - 1 ? parts[i].replaceAll("\\D.*", "") : parts[i]; - - if (StringUtils.hasText(input)) { - try { - intParts[i] = Integer.parseInt(input); - } catch (IllegalArgumentException o_O) { - throw new IllegalArgumentException(String.format(VERSION_PARSE_ERROR, input, version), o_O); - } - } - } - - return new Version(intParts); - } - - /** - * Returns whether the current {@link Version} is greater (newer) than the given one. - * - * @param version - * @return - */ - public boolean isGreaterThan(Version version) { - return compareTo(version) > 0; - } - - /** - * Returns whether the current {@link Version} is greater (newer) or the same as the given one. - * - * @param version - * @return - */ - public boolean isGreaterThanOrEqualTo(Version version) { - return compareTo(version) >= 0; - } - - /** - * Returns whether the current {@link Version} is the same as the given one. - * - * @param version - * @return - */ - public boolean is(Version version) { - return equals(version); - } - - /** - * Returns whether the current {@link Version} is less (older) than the given one. - * - * @param version - * @return - */ - public boolean isLessThan(Version version) { - return compareTo(version) < 0; - } - - /** - * Returns whether the current {@link Version} is less (older) or equal to the current one. - * - * @param version - * @return - */ - public boolean isLessThanOrEqualTo(Version version) { - return compareTo(version) <= 0; - } - - /* - * (non-Javadoc) - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - public int compareTo(Version that) { - - if (that == null) { - return 1; - } - - if (major != that.major) { - return major - that.major; - } - - if (minor != that.minor) { - return minor - that.minor; - } - - if (bugfix != that.bugfix) { - return bugfix - that.bugfix; - } - - if (build != that.build) { - return build - that.build; - } - - return 0; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - - if (this == obj) { - return true; - } - - if (!(obj instanceof Version)) { - return false; - } - - Version that = (Version) obj; - - return this.major == that.major && this.minor == that.minor && this.bugfix == that.bugfix - && this.build == that.build; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - - int result = 17; - result += 31 * major; - result += 31 * minor; - result += 31 * bugfix; - result += 31 * build; - return result; - } - - /* - * (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - - List digits = new ArrayList(); - digits.add(major); - digits.add(minor); - - if (build != 0 || bugfix != 0) { - digits.add(bugfix); - } - - if (build != 0) { - digits.add(build); - } - - return StringUtils.collectionToDelimitedString(digits, "."); - } -} +/* + * Copyright 2013-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.util; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +/** + * Value object to represent a Version consisting of major, minor and bugfix part. + * + * @author Oliver Gierke + */ +public class Version implements Comparable { + + private static final String VERSION_PARSE_ERROR = "Invalid version string! Could not parse segment %s within %s."; + + private final int major; + private final int minor; + private final int bugfix; + private final int build; + + /** + * Creates a new {@link Version} from the given integer values. At least one value has to be given but a maximum of 4. + * + * @param parts must not be {@literal null} or empty. + */ + public Version(int... parts) { + + Assert.notNull(parts, "Parts must not be null!"); + Assert.isTrue(parts.length > 0 && parts.length < 5, String.format("Invalid parts length. 0 < %s < 5", parts.length)); + + this.major = parts[0]; + this.minor = parts.length > 1 ? parts[1] : 0; + this.bugfix = parts.length > 2 ? parts[2] : 0; + this.build = parts.length > 3 ? parts[3] : 0; + + Assert.isTrue(major >= 0, "Major version must be greater or equal zero!"); + Assert.isTrue(minor >= 0, "Minor version must be greater or equal zero!"); + Assert.isTrue(bugfix >= 0, "Bugfix version must be greater or equal zero!"); + Assert.isTrue(build >= 0, "Build version must be greater or equal zero!"); + } + + /** + * Parses the given string representation of a version into a {@link Version} object. + * + * @param version must not be {@literal null} or empty. + * @return + */ + public static Version parse(String version) { + + Assert.hasText(version, "Version must not be null o empty!"); + + String[] parts = version.trim().split("\\."); + int[] intParts = new int[parts.length]; + + for (int i = 0; i < parts.length; i++) { + + String input = i == parts.length - 1 ? parts[i].replaceAll("\\D.*", "") : parts[i]; + + if (StringUtils.hasText(input)) { + try { + intParts[i] = Integer.parseInt(input); + } catch (IllegalArgumentException o_O) { + throw new IllegalArgumentException(String.format(VERSION_PARSE_ERROR, input, version), o_O); + } + } + } + + return new Version(intParts); + } + + /** + * Returns whether the current {@link Version} is greater (newer) than the given one. + * + * @param version + * @return + */ + public boolean isGreaterThan(Version version) { + return compareTo(version) > 0; + } + + /** + * Returns whether the current {@link Version} is greater (newer) or the same as the given one. + * + * @param version + * @return + */ + public boolean isGreaterThanOrEqualTo(Version version) { + return compareTo(version) >= 0; + } + + /** + * Returns whether the current {@link Version} is the same as the given one. + * + * @param version + * @return + */ + public boolean is(Version version) { + return equals(version); + } + + /** + * Returns whether the current {@link Version} is less (older) than the given one. + * + * @param version + * @return + */ + public boolean isLessThan(Version version) { + return compareTo(version) < 0; + } + + /** + * Returns whether the current {@link Version} is less (older) or equal to the current one. + * + * @param version + * @return + */ + public boolean isLessThanOrEqualTo(Version version) { + return compareTo(version) <= 0; + } + + /* + * (non-Javadoc) + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + public int compareTo(Version that) { + + if (that == null) { + return 1; + } + + if (major != that.major) { + return major - that.major; + } + + if (minor != that.minor) { + return minor - that.minor; + } + + if (bugfix != that.bugfix) { + return bugfix - that.bugfix; + } + + if (build != that.build) { + return build - that.build; + } + + return 0; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (!(obj instanceof Version)) { + return false; + } + + Version that = (Version) obj; + + return this.major == that.major && this.minor == that.minor && this.bugfix == that.bugfix + && this.build == that.build; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + + int result = 17; + result += 31 * major; + result += 31 * minor; + result += 31 * bugfix; + result += 31 * build; + return result; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + List digits = new ArrayList(); + digits.add(major); + digits.add(minor); + + if (build != 0 || bugfix != 0) { + digits.add(bugfix); + } + + if (build != 0) { + digits.add(build); + } + + return StringUtils.collectionToDelimitedString(digits, "."); + } +} diff --git a/src/main/resources/org/springframework/data/domain/jaxb/atom.xsd b/src/main/resources/org/springframework/data/domain/jaxb/atom.xsd index fc606ba37..1a904830b 100644 --- a/src/main/resources/org/springframework/data/domain/jaxb/atom.xsd +++ b/src/main/resources/org/springframework/data/domain/jaxb/atom.xsd @@ -1,240 +1,240 @@ - - - - - This version of the Atom schema is based on version 1.0 of the format specifications, - found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php. - - - - - - An Atom document may have two root elements, feed and entry, as defined in section 2. - - - - - - - - The Atom text construct is defined in section 3.1 of the format spec. - - - - - - - - - - - - - - - - - - - - The Atom person construct is defined in section 3.2 of the format spec. - - - - - - - - - - - - - - Schema definition for an email address. - - - - - - - - - - The Atom feed construct is defined in section 4.1.1 of the format spec. - - - - - - - - - - - - - - - - - - - - - - - - The Atom entry construct is defined in section 4.1.2 of the format spec. - - - - - - - - - - - - - - - - - - - - - - - The Atom content construct is defined in section 4.1.3 of the format spec. - - - - - - - - - - - - - The Atom cagegory construct is defined in section 4.2.2 of the format spec. - - - - - - - - - - - The Atom generator element is defined in section 4.2.4 of the format spec. - - - - - - - - - - - - - - The Atom icon construct is defined in section 4.2.5 of the format spec. - - - - - - - - - - - - The Atom id construct is defined in section 4.2.6 of the format spec. - - - - - - - - - - - - The Atom link construct is defined in section 3.4 of the format spec. - - - - - - - - - - - - - - The Atom logo construct is defined in section 4.2.8 of the format spec. - - - - - - - - - - - - The Atom source construct is defined in section 4.2.11 of the format spec. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + This version of the Atom schema is based on version 1.0 of the format specifications, + found here http://www.atomenabled.org/developers/syndication/atom-format-spec.php. + + + + + + An Atom document may have two root elements, feed and entry, as defined in section 2. + + + + + + + + The Atom text construct is defined in section 3.1 of the format spec. + + + + + + + + + + + + + + + + + + + + The Atom person construct is defined in section 3.2 of the format spec. + + + + + + + + + + + + + + Schema definition for an email address. + + + + + + + + + + The Atom feed construct is defined in section 4.1.1 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + + The Atom entry construct is defined in section 4.1.2 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + The Atom content construct is defined in section 4.1.3 of the format spec. + + + + + + + + + + + + + The Atom cagegory construct is defined in section 4.2.2 of the format spec. + + + + + + + + + + + The Atom generator element is defined in section 4.2.4 of the format spec. + + + + + + + + + + + + + + The Atom icon construct is defined in section 4.2.5 of the format spec. + + + + + + + + + + + + The Atom id construct is defined in section 4.2.6 of the format spec. + + + + + + + + + + + + The Atom link construct is defined in section 3.4 of the format spec. + + + + + + + + + + + + + + The Atom logo construct is defined in section 4.2.8 of the format spec. + + + + + + + + + + + + The Atom source construct is defined in section 4.2.11 of the format spec. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/springframework/data/util/VersionUnitTests.java b/src/test/java/org/springframework/data/util/VersionUnitTests.java index 52f0f2388..8472811f5 100644 --- a/src/test/java/org/springframework/data/util/VersionUnitTests.java +++ b/src/test/java/org/springframework/data/util/VersionUnitTests.java @@ -1,166 +1,166 @@ -/* - * Copyright 2015-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.util; - -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - -import org.hamcrest.Matchers; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * Unit tests for {@link Version}. - * - * @author Oliver Gierke - */ -public class VersionUnitTests { - - public @Rule ExpectedException exception = ExpectedException.none(); - - @Test // DATCMNS-384 - public void sameVersionsEqualOneDigits() { - - Version first = new Version(6); - Version second = new Version(6); - - assertThat(first, is(second)); - assertThat(second, is(first)); - } - - @Test // DATCMNS-384 - public void sameVersionsEqualTwoDigits() { - - Version first = new Version(5, 2); - Version second = new Version(5, 2); - - assertThat(first, is(second)); - assertThat(second, is(first)); - } - - @Test // DATCMNS-384 - public void sameVersionsEqualThreeDigits() { - - Version first = new Version(1, 2, 3); - Version second = new Version(1, 2, 3); - - assertThat(first, is(second)); - assertThat(second, is(first)); - } - - @Test // DATCMNS-384 - public void sameVersionsEqualFourDigits() { - - Version first = new Version(1, 2, 3, 1000); - Version second = new Version(1, 2, 3, 1000); - - assertThat(first, is(second)); - assertThat(second, is(first)); - } - - @Test // DATCMNS-384 - public void parsesVersionCorrectlyOneDigits() { - - Version version = Version.parse("5"); - assertThat(version, is(new Version(5))); - } - - @Test // DATCMNS-384 - public void parsesVersionCorrectlyTwoDigits() { - - Version version = Version.parse("5.2"); - assertThat(version, is(new Version(5, 2))); - } - - @Test // DATCMNS-384 - public void parsesVersionCorrectlyThreeDigits() { - - Version version = Version.parse("12.1.3"); - assertThat(version, is(new Version(12, 1, 3))); - } - - @Test // DATCMNS-384 - public void parsesVersionCorrectlyFourDigits() { - - Version version = Version.parse("12.1.3.1000"); - assertThat(version, is(new Version(12, 1, 3, 1000))); - } - - @Test // DATCMNS-384 - public void comparesToCorrectly() { - - Version version = new Version(1, 2, 3, 1000); - Version nextBuild = new Version(1, 2, 3, 1001); - Version nextBugfix = new Version(1, 2, 4); - Version nextMinor = new Version(1, 3); - Version nextMajor = new Version(2); - - assertThat(nextMajor.isGreaterThan(nextMinor), is(true)); - assertThat(nextMajor.isGreaterThan(nextMajor), is(false)); - assertThat(nextMajor.is(nextMajor), is(true)); - assertThat(nextMinor.isLessThan(nextMajor), is(true)); - assertThat(nextMinor.isLessThan(nextMinor), is(false)); - - assertThat(nextMajor.compareTo(nextMajor), is(0)); - assertThat(nextMinor.compareTo(nextMinor), is(0)); - assertThat(nextBugfix.compareTo(nextBugfix), is(0)); - assertThat(nextBuild.compareTo(nextBuild), is(0)); - - assertThat(version.compareTo(nextMajor), is(lessThan(0))); - assertThat(version.compareTo(nextMinor), is(lessThan(0))); - assertThat(version.compareTo(nextBugfix), is(lessThan(0))); - assertThat(version.compareTo(nextBuild), is(lessThan(0))); - - assertThat(version.compareTo(null), is(greaterThan(0))); - assertThat(nextMajor.compareTo(version), is(greaterThan(0))); - assertThat(nextMinor.compareTo(version), is(greaterThan(0))); - assertThat(nextBugfix.compareTo(version), is(greaterThan(0))); - assertThat(nextBuild.compareTo(version), is(greaterThan(0))); - } - - @Test // DATCMNS-384 - public void removesTrailingZerosAfterSecondValueForToString() { - - assertThat(new Version(2).toString(), is("2.0")); - assertThat(new Version(2, 0).toString(), is("2.0")); - assertThat(new Version(2, 0, 0).toString(), is("2.0")); - assertThat(new Version(2, 0, 0, 0).toString(), is("2.0")); - assertThat(new Version(2, 0, 1).toString(), is("2.0.1")); - assertThat(new Version(2, 0, 1, 0).toString(), is("2.0.1")); - assertThat(new Version(2, 0, 0, 1).toString(), is("2.0.0.1")); - } - - @Test // DATACMNS-496 - public void parseShouldRemoveNonNumericVersionParts() { - assertThat(Version.parse("2.0.0-rc1"), is(new Version(2, 0, 0))); - } - - @Test // DATACMNS-719, DATACMNS-496 - public void removesNonNumericSuffix() { - assertThat(Version.parse("4.2.0.RELEASE"), is(new Version(4, 2, 0))); - } - - @Test // DATACMNS-719, DATACMNS-496 - public void rejectsNonNumericPartOnNonLastPosition() { - - exception.expect(IllegalArgumentException.class); - exception.expectCause(Matchers. instanceOf(IllegalArgumentException.class)); - exception.expectMessage("1.RELEASE.2"); - - Version.parse("1.RELEASE.2"); - } -} +/* + * Copyright 2015-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.util; + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import org.hamcrest.Matchers; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +/** + * Unit tests for {@link Version}. + * + * @author Oliver Gierke + */ +public class VersionUnitTests { + + public @Rule ExpectedException exception = ExpectedException.none(); + + @Test // DATCMNS-384 + public void sameVersionsEqualOneDigits() { + + Version first = new Version(6); + Version second = new Version(6); + + assertThat(first, is(second)); + assertThat(second, is(first)); + } + + @Test // DATCMNS-384 + public void sameVersionsEqualTwoDigits() { + + Version first = new Version(5, 2); + Version second = new Version(5, 2); + + assertThat(first, is(second)); + assertThat(second, is(first)); + } + + @Test // DATCMNS-384 + public void sameVersionsEqualThreeDigits() { + + Version first = new Version(1, 2, 3); + Version second = new Version(1, 2, 3); + + assertThat(first, is(second)); + assertThat(second, is(first)); + } + + @Test // DATCMNS-384 + public void sameVersionsEqualFourDigits() { + + Version first = new Version(1, 2, 3, 1000); + Version second = new Version(1, 2, 3, 1000); + + assertThat(first, is(second)); + assertThat(second, is(first)); + } + + @Test // DATCMNS-384 + public void parsesVersionCorrectlyOneDigits() { + + Version version = Version.parse("5"); + assertThat(version, is(new Version(5))); + } + + @Test // DATCMNS-384 + public void parsesVersionCorrectlyTwoDigits() { + + Version version = Version.parse("5.2"); + assertThat(version, is(new Version(5, 2))); + } + + @Test // DATCMNS-384 + public void parsesVersionCorrectlyThreeDigits() { + + Version version = Version.parse("12.1.3"); + assertThat(version, is(new Version(12, 1, 3))); + } + + @Test // DATCMNS-384 + public void parsesVersionCorrectlyFourDigits() { + + Version version = Version.parse("12.1.3.1000"); + assertThat(version, is(new Version(12, 1, 3, 1000))); + } + + @Test // DATCMNS-384 + public void comparesToCorrectly() { + + Version version = new Version(1, 2, 3, 1000); + Version nextBuild = new Version(1, 2, 3, 1001); + Version nextBugfix = new Version(1, 2, 4); + Version nextMinor = new Version(1, 3); + Version nextMajor = new Version(2); + + assertThat(nextMajor.isGreaterThan(nextMinor), is(true)); + assertThat(nextMajor.isGreaterThan(nextMajor), is(false)); + assertThat(nextMajor.is(nextMajor), is(true)); + assertThat(nextMinor.isLessThan(nextMajor), is(true)); + assertThat(nextMinor.isLessThan(nextMinor), is(false)); + + assertThat(nextMajor.compareTo(nextMajor), is(0)); + assertThat(nextMinor.compareTo(nextMinor), is(0)); + assertThat(nextBugfix.compareTo(nextBugfix), is(0)); + assertThat(nextBuild.compareTo(nextBuild), is(0)); + + assertThat(version.compareTo(nextMajor), is(lessThan(0))); + assertThat(version.compareTo(nextMinor), is(lessThan(0))); + assertThat(version.compareTo(nextBugfix), is(lessThan(0))); + assertThat(version.compareTo(nextBuild), is(lessThan(0))); + + assertThat(version.compareTo(null), is(greaterThan(0))); + assertThat(nextMajor.compareTo(version), is(greaterThan(0))); + assertThat(nextMinor.compareTo(version), is(greaterThan(0))); + assertThat(nextBugfix.compareTo(version), is(greaterThan(0))); + assertThat(nextBuild.compareTo(version), is(greaterThan(0))); + } + + @Test // DATCMNS-384 + public void removesTrailingZerosAfterSecondValueForToString() { + + assertThat(new Version(2).toString(), is("2.0")); + assertThat(new Version(2, 0).toString(), is("2.0")); + assertThat(new Version(2, 0, 0).toString(), is("2.0")); + assertThat(new Version(2, 0, 0, 0).toString(), is("2.0")); + assertThat(new Version(2, 0, 1).toString(), is("2.0.1")); + assertThat(new Version(2, 0, 1, 0).toString(), is("2.0.1")); + assertThat(new Version(2, 0, 0, 1).toString(), is("2.0.0.1")); + } + + @Test // DATACMNS-496 + public void parseShouldRemoveNonNumericVersionParts() { + assertThat(Version.parse("2.0.0-rc1"), is(new Version(2, 0, 0))); + } + + @Test // DATACMNS-719, DATACMNS-496 + public void removesNonNumericSuffix() { + assertThat(Version.parse("4.2.0.RELEASE"), is(new Version(4, 2, 0))); + } + + @Test // DATACMNS-719, DATACMNS-496 + public void rejectsNonNumericPartOnNonLastPosition() { + + exception.expect(IllegalArgumentException.class); + exception.expectCause(Matchers. instanceOf(IllegalArgumentException.class)); + exception.expectMessage("1.RELEASE.2"); + + Version.parse("1.RELEASE.2"); + } +} diff --git a/src/test/resources/META-INF/beans.xml b/src/test/resources/META-INF/beans.xml index 73ae3a251..71dc6db1f 100644 --- a/src/test/resources/META-INF/beans.xml +++ b/src/test/resources/META-INF/beans.xml @@ -1,6 +1,6 @@ - - - - + + + +