001/* 002 * Forge Mod Loader 003 * Copyright (c) 2012-2013 cpw. 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser Public License v2.1 006 * which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 008 * 009 * Contributors: 010 * cpw - implementation 011 */ 012 013package cpw.mods.fml.common.versioning; 014 015/* 016 * Licensed to the Apache Software Foundation (ASF) under one 017 * or more contributor license agreements. See the NOTICE file 018 * distributed with this work for additional information 019 * regarding copyright ownership. The ASF licenses this file 020 * to you under the Apache License, Version 2.0 (the 021 * "License"); you may not use this file except in compliance 022 * with the License. You may obtain a copy of the License at 023 * 024 * http://www.apache.org/licenses/LICENSE-2.0 025 * 026 * Unless required by applicable law or agreed to in writing, 027 * software distributed under the License is distributed on an 028 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 029 * KIND, either express or implied. See the License for the 030 * specific language governing permissions and limitations 031 * under the License. 032 */ 033 034/** 035 * Describes a restriction in versioning. 036 * 037 * @author <a href="mailto:brett@apache.org">Brett Porter</a> 038 */ 039public class Restriction 040{ 041 private final ArtifactVersion lowerBound; 042 043 private final boolean lowerBoundInclusive; 044 045 private final ArtifactVersion upperBound; 046 047 private final boolean upperBoundInclusive; 048 049 public static final Restriction EVERYTHING = new Restriction( null, false, null, false ); 050 051 public Restriction( ArtifactVersion lowerBound, boolean lowerBoundInclusive, ArtifactVersion upperBound, 052 boolean upperBoundInclusive ) 053 { 054 this.lowerBound = lowerBound; 055 this.lowerBoundInclusive = lowerBoundInclusive; 056 this.upperBound = upperBound; 057 this.upperBoundInclusive = upperBoundInclusive; 058 } 059 060 public ArtifactVersion getLowerBound() 061 { 062 return lowerBound; 063 } 064 065 public boolean isLowerBoundInclusive() 066 { 067 return lowerBoundInclusive; 068 } 069 070 public ArtifactVersion getUpperBound() 071 { 072 return upperBound; 073 } 074 075 public boolean isUpperBoundInclusive() 076 { 077 return upperBoundInclusive; 078 } 079 080 public boolean containsVersion( ArtifactVersion version ) 081 { 082 if ( lowerBound != null ) 083 { 084 int comparison = lowerBound.compareTo( version ); 085 086 if ( ( comparison == 0 ) && !lowerBoundInclusive ) 087 { 088 return false; 089 } 090 if ( comparison > 0 ) 091 { 092 return false; 093 } 094 } 095 if ( upperBound != null ) 096 { 097 int comparison = upperBound.compareTo( version ); 098 099 if ( ( comparison == 0 ) && !upperBoundInclusive ) 100 { 101 return false; 102 } 103 if ( comparison < 0 ) 104 { 105 return false; 106 } 107 } 108 109 return true; 110 } 111 112 @Override 113 public int hashCode() 114 { 115 int result = 13; 116 117 if ( lowerBound == null ) 118 { 119 result += 1; 120 } 121 else 122 { 123 result += lowerBound.hashCode(); 124 } 125 126 result *= lowerBoundInclusive ? 1 : 2; 127 128 if ( upperBound == null ) 129 { 130 result -= 3; 131 } 132 else 133 { 134 result -= upperBound.hashCode(); 135 } 136 137 result *= upperBoundInclusive ? 2 : 3; 138 139 return result; 140 } 141 142 @Override 143 public boolean equals( Object other ) 144 { 145 if ( this == other ) 146 { 147 return true; 148 } 149 150 if ( !( other instanceof Restriction ) ) 151 { 152 return false; 153 } 154 155 Restriction restriction = (Restriction) other; 156 if ( lowerBound != null ) 157 { 158 if ( !lowerBound.equals( restriction.lowerBound ) ) 159 { 160 return false; 161 } 162 } 163 else if ( restriction.lowerBound != null ) 164 { 165 return false; 166 } 167 168 if ( lowerBoundInclusive != restriction.lowerBoundInclusive ) 169 { 170 return false; 171 } 172 173 if ( upperBound != null ) 174 { 175 if ( !upperBound.equals( restriction.upperBound ) ) 176 { 177 return false; 178 } 179 } 180 else if ( restriction.upperBound != null ) 181 { 182 return false; 183 } 184 185 if ( upperBoundInclusive != restriction.upperBoundInclusive ) 186 { 187 return false; 188 } 189 190 return true; 191 } 192 193 public String toString() 194 { 195 StringBuilder buf = new StringBuilder(); 196 197 buf.append( isLowerBoundInclusive() ? "[" : "(" ); 198 if ( getLowerBound() != null ) 199 { 200 buf.append( getLowerBound().toString() ); 201 } 202 buf.append( "," ); 203 if ( getUpperBound() != null ) 204 { 205 buf.append( getUpperBound().toString() ); 206 } 207 buf.append( isUpperBoundInclusive() ? "]" : ")" ); 208 209 return buf.toString(); 210 } 211}