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 }