/** * Copyright 2010 Molindo GmbH * * 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.wicketstuff.mergedresources.versioning; import org.apache.wicket.IClusterable; public abstract class AbstractResourceVersion implements IClusterable { private static final long serialVersionUID = 1L; public static AbstractResourceVersion NO_VERSION = new AbstractResourceVersion() { private static final long serialVersionUID = 1L; public String getVersion() { return ""; } public boolean isValid() { return false; } public int compareValid(AbstractResourceVersion o) { // shouldn't ever be called return -1; } }; public abstract boolean isValid(); public abstract String getVersion(); /** * @param o * the object to be compared. * @return a negative integer, zero, or a positive integer as this object is * less than, equal to, or greater than the specified object. * @throws IncompatibleVersionsException */ public final int compareTo(AbstractResourceVersion o) throws IncompatibleVersionsException { if (!o.isValid()) { return isValid() ? 1 : 0; } else { return isValid() ? compareValid(o) : -1; } } protected abstract int compareValid(AbstractResourceVersion o) throws IncompatibleVersionsException; public static final class IncompatibleVersionsException extends Exception { public IncompatibleVersionsException(AbstractResourceVersion v1, AbstractResourceVersion v2) { super(v1 + " and " + v2 + " are incompatible"); } private static final long serialVersionUID = 1L; } }