Package org.jasig.portal.version

Source Code of org.jasig.portal.version.AbstractVersion

/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig licenses this file to you 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.jasig.portal.version;

import java.io.Serializable;

import org.jasig.portal.version.om.Version;

/**
* Base class for versions that implements a "correct" equals hashCode, equals and toString
*
* @author Eric Dalquist
*/
public abstract class AbstractVersion implements Version, Serializable {
    private static final long serialVersionUID = 1L;
   
    private int hashCode = 0;
   
    @Override
    public final boolean isBefore(Version other) {
        return compareTo(other) < 0;
    }

    @Override
    public final boolean isAfter(Version other) {
        return compareTo(other) > 1;
    }

    @Override
    public final int compareTo(Version o) {
        int diff = getMajor() - o.getMajor();
        if (diff > 0) {
            return 1;
        }
        if (diff < 0) {
            return -1;
        }
       
        diff = getMinor() - o.getMinor();
        if (diff > 0) {
            return 1;
        }
        if (diff < 0) {
            return -1;
        }
       
        diff = getPatch() - o.getPatch();
        if (diff > 0) {
            return 1;
        }
        if (diff < 0) {
            return -1;
        }
       
        final Integer l = getLocal();
        final Integer ol = o.getLocal();
        if (l == ol) {
            return 0;
        }
        if (l == null) {
            return -1;
        }
        if (ol == null) {
            return 1;
        }
        return l.compareTo(ol);
    }

    @Override
    public final int hashCode() {
      int result = hashCode;
      if (result == 0) {
          final int prime = 31;
          result = 1;
          result = prime * result + getMajor();
          result = prime * result + getMinor();
          result = prime * result + getPatch();
          final Integer local = getLocal();
          result = prime * result + ((local == null) ? 0 : local.hashCode());
          hashCode = result;
      }
      return result;
    }

    @Override
    public final boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null || obj.hashCode() != this.hashCode())
            return false;
        if (!(obj instanceof Version))
            return false;
        Version other = (Version) obj;
        if (getMajor() != other.getMajor())
            return false;
        if (getMinor() != other.getMinor())
            return false;
        if (getPatch() != other.getPatch())
            return false;
        final Integer local = getLocal();
        final Integer oLocal = other.getLocal();
        if (local == null) {
            if (oLocal != null)
                return false;
        }
        else if (!local.equals(oLocal))
            return false;
        return true;
    }
   
    @Override
    public final String toString() {
        final Integer local = getLocal();
        if (local == null) {
            return getMajor() + "." + getMinor() + "." + getPatch();
        }
        return getMajor() + "." + getMinor() + "." + getPatch() + "." + local;
    }
}
TOP

Related Classes of org.jasig.portal.version.AbstractVersion

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.