001 /*
002 * JBoss DNA (http://www.jboss.org/dna)
003 * See the COPYRIGHT.txt file distributed with this work for information
004 * regarding copyright ownership. Some portions may be licensed
005 * to Red Hat, Inc. under one or more contributor license agreements.
006 * See the AUTHORS.txt file in the distribution for a full listing of
007 * individual contributors.
008 *
009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010 * is licensed to you under the terms of the GNU Lesser General Public License as
011 * published by the Free Software Foundation; either version 2.1 of
012 * the License, or (at your option) any later version.
013 *
014 * JBoss DNA is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017 * Lesser General Public License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this software; if not, write to the Free
021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023 */
024 package org.jboss.dna.connector.federation.contribution;
025
026 import net.jcip.annotations.Immutable;
027 import org.jboss.dna.graph.Location;
028 import org.jboss.dna.graph.property.DateTime;
029
030 /**
031 * A source contribution that is empty. In other words, the source has no contribution to make.
032 * <p>
033 * Note that this is different than an unknown contribution, which may occur when a source is added to a federated repository
034 * after the contributions have already been determined for nodes. In this case, the new source's contribution for a node is not
035 * known and must be determined.
036 * </p>
037 *
038 * @author Randall Hauch
039 */
040 @Immutable
041 public class EmptyContribution extends Contribution {
042
043 /**
044 * This is the first version of this class. See the documentation of MergePlan.serialVersionUID.
045 */
046 private static final long serialVersionUID = 1L;
047
048 /**
049 * Create a contribution for the source with the supplied name.
050 *
051 * @param sourceName the name of the source, which may not be null or blank
052 * @param workspaceName the name of the workspace, which may not be null or blank
053 * @param expirationTime the time (in UTC) after which this contribution should be considered expired, or null if there is no
054 * expiration time
055 */
056 public EmptyContribution( String sourceName,
057 String workspaceName,
058 DateTime expirationTime ) {
059 super(sourceName, workspaceName, expirationTime);
060 if (ContributionStatistics.RECORD) ContributionStatistics.record(0, 0);
061 }
062
063 /**
064 * {@inheritDoc}
065 *
066 * @see org.jboss.dna.connector.federation.contribution.Contribution#getLocationInSource()
067 */
068 @Override
069 public Location getLocationInSource() {
070 return null;
071 }
072
073 /**
074 * {@inheritDoc}
075 *
076 * @see org.jboss.dna.connector.federation.contribution.Contribution#isEmpty()
077 */
078 @Override
079 public boolean isEmpty() {
080 return true;
081 }
082
083 /**
084 * {@inheritDoc}
085 */
086 @Override
087 public boolean equals( Object obj ) {
088 if (obj == this) return true;
089 if (obj instanceof EmptyContribution) {
090 EmptyContribution that = (EmptyContribution)obj;
091 if (!this.getSourceName().equals(that.getSourceName())) return false;
092 if (!this.getWorkspaceName().equals(that.getWorkspaceName())) return false;
093 return true;
094 }
095 return false;
096 }
097 }