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.repository.sequencers; 023 024 import java.util.Collection; 025 import java.util.Collections; 026 import java.util.LinkedHashSet; 027 import java.util.Set; 028 import net.jcip.annotations.Immutable; 029 import org.jboss.dna.common.component.ComponentConfig; 030 031 /** 032 * @author Randall Hauch 033 */ 034 @Immutable 035 public class SequencerConfig extends ComponentConfig { 036 037 private final Set<SequencerPathExpression> pathExpressions; 038 039 public SequencerConfig( String name, String description, String classname, String[] classpath, String... pathExpressions ) { 040 this(name, description, System.currentTimeMillis(), classname, classpath, pathExpressions); 041 } 042 043 public SequencerConfig( String name, String description, long timestamp, String classname, String[] classpath, String... pathExpressions ) { 044 super(name, description, timestamp, classname, classpath); 045 this.pathExpressions = buildPathExpressionSet(pathExpressions); 046 } 047 048 /* package */static Set<SequencerPathExpression> buildPathExpressionSet( String... pathExpressions ) { 049 Set<SequencerPathExpression> result = null; 050 if (pathExpressions != null) { 051 result = new LinkedHashSet<SequencerPathExpression>(); 052 for (String pathExpression : pathExpressions) { 053 if (pathExpression == null) continue; 054 pathExpression = pathExpression.trim(); 055 if (pathExpression.length() == 0) continue; 056 result.add(SequencerPathExpression.compile(pathExpression)); 057 } 058 result = Collections.unmodifiableSet(result); 059 } else { 060 result = Collections.emptySet(); // already immutable 061 } 062 return result; 063 } 064 065 public Collection<SequencerPathExpression> getPathExpressions() { 066 return Collections.unmodifiableSet(this.pathExpressions); 067 } 068 069 public boolean hasChanged( SequencerConfig that ) { 070 if (super.hasChanged(that)) return true; 071 if (!this.getPathExpressions().equals(that.getPathExpressions())) return true; 072 return false; 073 } 074 075 }