001 /*
002 * JBoss, Home of Professional Open Source.
003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004 * as indicated by the @author tags. See the copyright.txt file in the
005 * distribution for a full listing of individual contributors.
006 *
007 * This is free software; you can redistribute it and/or modify it
008 * under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation; either version 2.1 of
010 * the License, or (at your option) any later version.
011 *
012 * This software is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this software; if not, write to the Free
019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021 */
022 package org.jboss.dna.graph.connectors;
023
024 import net.jcip.annotations.Immutable;
025
026 /**
027 * The capabilities of a {@link RepositorySource}. This class can be used as is, or subclassed to define more complex behavior.
028 *
029 * @see RepositorySource#getCapabilities()
030 * @author Randall Hauch
031 */
032 @Immutable
033 public class RepositorySourceCapabilities {
034
035 /**
036 * The default support for same-name-siblings is {@value} .
037 */
038 public static final boolean DEFAULT_SUPPORT_SAME_NAME_SIBLINGS = true;
039
040 /**
041 * The default support for updates is {@value} .
042 */
043 public static final boolean DEFAULT_SUPPORT_UPDATES = false;
044
045 /**
046 * The default support for updates is {@value} .
047 */
048 public static final boolean DEFAULT_SUPPORT_EVENTS = false;
049
050 private boolean sameNameSiblings;
051 private boolean updates;
052 private boolean events;
053
054 /**
055 * Create a capabilities object using the defaults, .
056 */
057 public RepositorySourceCapabilities() {
058 this(DEFAULT_SUPPORT_SAME_NAME_SIBLINGS, DEFAULT_SUPPORT_UPDATES, DEFAULT_SUPPORT_EVENTS);
059 }
060
061 public RepositorySourceCapabilities( boolean supportsSameNameSiblings,
062 boolean supportsUpdates ) {
063 this(supportsSameNameSiblings, supportsUpdates, DEFAULT_SUPPORT_EVENTS);
064 }
065
066 public RepositorySourceCapabilities( boolean supportsSameNameSiblings,
067 boolean supportsUpdates,
068 boolean supportsEvents ) {
069 this.sameNameSiblings = supportsSameNameSiblings;
070 this.updates = supportsUpdates;
071 this.events = supportsEvents;
072 }
073
074 /**
075 * Return whether the source supports same name siblings. If not, then no two siblings may share the same name.
076 *
077 * @return true if same name siblings are supported, or false otherwise
078 */
079 public boolean supportsSameNameSiblings() {
080 return sameNameSiblings;
081 }
082
083 /**
084 * Return whether the source supports updates. This may be true, even though a particular connection made on behalf of a user
085 * may not have any update privileges. In other words, returning <code>false</code> implies that no connections would allow
086 * updates to the content.
087 *
088 * @return true if updates are supported, or false if the source only supports reads.
089 */
090 public boolean supportsUpdates() {
091 return updates;
092 }
093
094 /**
095 * Return whether the source supports events through {@link RepositorySourceListener}s.
096 *
097 * @return true if events are supported, or false if the source is not capable of generating events
098 */
099 public boolean supportsEvents() {
100 return events;
101 }
102 }